问题是从 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/