性能:从 HashMap.values() 创建一个 ArrayList [英] Performance: Creating an ArrayList from HashMap.values()

查看:28
本文介绍了性能:从 HashMap.values() 创建一个 ArrayList的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Question is how much it costs to create an ArrayList from a HashMap.values() Collection? Or creating the values Collection alone? Assuming Map.size() > 100k. Objects could also be held in ArrayList (instead of HashMap) all the time which has implications in other parts (modifications of elements, easy by key). The ArrayList is used to iterate over every n-th element. (That's why the values collection can't be used directly). No modifications are done during the iteration.

推荐答案

HashMap.values() 返回的不是 ArrayList 的值,而是 Values 收藏.

HashMap.values() doesn't return an ArrayList of values but a Values Collection.

来源:

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

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

Values is an AbstractCollection. The reason for values is just to reference HashMap's iterator.

您的问题:

问题是要花多少钱从一个 ArrayList 创建一个HashMap.values() 集合?

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

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

That's a linear complexity (as Bozho said) since

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

ArrayList,valuesList 调用集合 hashMap toArray() 方法,该方法基本上从集合中的 0..N(大小)个元素.

the ArrayList, valuesList calls the collection hashMap toArray() method which essentially does a for loop from 0..N (size) element in the collection.

希望这会有所帮助.

这篇关于性能:从 HashMap.values() 创建一个 ArrayList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆