问题是,从HashMap.values()集合创建ArrayList需要多少钱?还是仅创建值Collection?
假设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()));
    }
ValuesAbstractCollection。值的原因仅是引用HashMap的迭代器。

你的问题:



这是线性复杂度(如Bozho所说),因为
ArrayList<V> valuesList = new ArrayList<V>(hashMap.values());

在ArrayList中,valuesList调用集合hashMap toArray()方法,该方法实际上从集合中的0..N(大小)元素开始进行for循环。

希望这可以帮助。

10-04 11:07