問題是從HashMap.values()集合創建ArrayList需要多少成本?或者單獨創建值集合? 假設Map.size()> 100k。 對象也可以一直保存在ArrayList(而不是HashMap)中,這對其他部分(元素的修改,通過鍵很容易)有影響。 ArrayList用於迭代每個第n個元素。 (這就是爲什麼值集合不能直接使用)。迭代過程中不做任何修改。性能:從HashMap.values()創建ArrayList()
18
A
回答
2
您可以使用Iterator
跳過元素 - 多次呼叫next()
。
創建任何集合的列表具有線性複雜性。
0
你可以創建自己的HashMap,直接保存Arraylist值集合(我不相信HashMap是免費的,它的數據結構是不同的)。但是這需要你的一些額外的編碼。
7
HashMap
內部存儲集合values
中的值。看看AbstractMap
的source code,它的父母HashMap
。
因此HashMap.values()
直接返回Collection
。沒有計算或數據複製完成。它儘可能快。
剛剛得到的值,然後循環做:
int n = 5; // every 5th element
Object[] values = hashMap.values().toArray();
int size = values.length;
for (int i = 0; i < size; i += n){
values[i];
// do something
)
34
HashMap.values()
不返回值的ArrayList
但Values
集合。
來源:
public Collection<V> values() {
Collection<V> vs = values;
return (vs != null ? vs : (values = new Values()));
}
Values
是AbstractCollection
。值的原因就是引用HashMap的迭代器。
你的問題:
問題是,要花多少錢 創建從 HashMap.values()收集一個ArrayList?
這是一個線性複雜(如Bozho所述),因爲
ArrayList<V> valuesList = new ArrayList<V>(hashMap.values());
ArrayList中,valuesList
調用集合hashMap
toArray()
方法,其基本上不從0..N(大小)元件的for
環在採集。
希望這會有所幫助。
3
要詳細說明@ Bozho的解決方案,你可以做。
int count = 0;
for(Value value: map.values())
if(count++ % 5 == 0)
// do something.
相關問題
- 1. 從ArrayList創建矩陣
- 2. 從ArrayList創建ListView佈局
- 3. 創建一個從ArrayList中
- 4. 創建一個ArrayList
- 5. 從文本字段創建一個ArrayList
- 6. 從ArrayList創建一個int [] <Integer>
- 7. 試圖從ArrayList創建Struts2中的表
- 8. 從字符串[java]創建創建的類的ArrayList
- 9. 在Java中創建通用ArrayList的ArrayList
- 10. 如何創建性能
- 11. c#性能 - 創建字體
- 12. 使用OutVariable創建ArrayList
- 13. 創建員工的ArrayList
- 14. ArrayList創建的JSP表格
- 15. 創建Android ArrayList錯誤
- 16. Vaadin:創建TabSheets的ArrayList
- 17. 創建實例從屬性
- 18. 的Java的ArrayList:內的ArrayList合併的ArrayList創建一個ArrayList的
- 19. 從ol.extent.boundingExtent創建功能?
- 20. 如何創建項目的屬性列表? LinkedList,ArrayList,文件?
- 21. 爲ArrayList屬性創建單獨的java bean
- 22. 如何從Arraylist構建TreeView
- 23. 如何將一個空arrayList添加到從類創建的另一個arrayList
- 24. 性能計數器 - 性能類別創建錯誤
- 25. 創建數據庫視圖vs創建休眠映射 - 性能
- 26. 創建多個小文件的性能
- 27. 使用StringTemplate創建XML的性能?
- 28. 在Java中創建性能計數器
- 29. 創建視圖,SQL查詢性能
- 30. 在WPF中創建高性能動畫
問題不清楚,我不明白。 – Emil 2010-11-23 10:32:40
當你談論「成本」時,你的意思是時間還是記憶? – Ralph 2010-11-23 11:24:39