java - 性能:从 HashMap.values() 创建一个 ArrayList

标签 java performance collections arraylist hashmap

问题是从 HashMap.values() 集合创建 ArrayList 需要多少成本?还是单独创建值集合? 假设 Map.size() > 100k。 对象也可以一直保存在 ArrayList(而不是 HashMap)中,这对其他部分有影响(元素的修改,很容易按键)。 ArrayList 用于迭代每个第 n 个元素。 (这就是为什么不能直接使用 values 集合的原因)。迭代期间不进行任何修改。

最佳答案

HashMap.values() 不返回值的 ArrayList 而是一个 Values 集合。

来源:

 public Collection<V> values() {
        Collection<V> vs = values;
        return (vs != null ? vs : (values = new Values()));
    }

Values 是一个 AbstractCollection。 values的原因只是为了引用HashMap的迭代器。

你的问题:

Question is how much it costs to create an ArrayList from a HashMap.values() Collection?

这是一个线性复杂性(正如 Bozho 所说),因为

ArrayList<V> valuesList = new ArrayList<V>(hashMap.values());

ArrayList, valuesList 调用集合 hashMap toArray() 方法,该方法本质上是执行 for 循环集合中的 0..N(大小)元素。

希望这会有所帮助。

关于java - 性能:从 HashMap.values() 创建一个 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4255075/

相关文章:

java - 如何通过 XA 数据源调用 DBlink

c - (几乎)用于开关的非冲突简单哈希函数

python - 不同大小数组的 Numpy 运算

python - 为什么 pandas read_csv 转换器的性能要慢得多并且是非矢量化的?

java - Java 中的资源、URI、URL、路径和文件有什么区别?

如果字符串包含非法字符,则返回 Java 函数

java - 避免具有多个相同类型参数的方法

php - Laravel LengthAwarePaginator 返回的数据不在单个对象中

java - 如何从集合中获取 100 个对象?

c# - C# 中的 HashSet 是否有等效的 AddRange