Map遍歷的四種方法及比較

2021-07-27 08:56:51 字數 1814 閱讀 8002

1 如果你使用hashmap

1.同時遍歷key和value時,keyset與entryset方法的效能差異取決於key的具體情況,如複雜度(複雜物件)、離散度、衝突率等。換言之,取決於hashmap查詢value的開銷。entryset一次性取出所有 key和value的操作是有效能開銷的,當這個損失小於hashmap查詢value的開銷時,entryset的效能優勢就會體現出來。例如上述對比測試中,當key是最簡單的數值字串時,keyset可能反而會更高效,耗時比entryset少10%。總體來說還是推薦使用entryset。因為當key很簡單時,其效能或許會略低於keyset,但卻是可控的;而隨著key的複雜化,entryset的優勢將會明顯體現出來。當然,我們可以根據實際情況進行選擇

2.只遍歷key時,keyset方法更為合適,因為entryset將無用的value也給取出來了,浪費了效能和空間。在上述測試結果中,keyset比entryset方法耗時少23%。

3.只遍歷value時,使用vlaues方法是最佳選擇,entryset會略好於keyset方法。

for (string key : map.keyset())

for (entryentry: map.entryset())

for (string value : map.values())

2 如果你使用treemap

1.同時遍歷key和value時,與hashmap不同,entryset的效能遠遠高於keyset。這是由treemap的查詢效率決定的,也就是說,treemap查詢value的開銷較大,明顯高於entryset一次性取出所有key和value的開銷。因此,遍歷treemap時強烈推薦使用entryset方法。

2.只遍歷key時,keyset方法更為合適,因為entryset將無用的value也給取出來了,浪費了效能和空間。在上述測試結果中,keyset比entryset方法耗時少24%。

3.只遍歷value時,使用vlaues方法是最佳選擇,entryset也明顯優於keyset方法。

for (string key : map.keyset())

for (entryentry: map.entryset())

for (string value : map.values())

mapmap = new hashmap();

map.put("key1", "value1");

map.put("key2", "value2");

map.put("key3", "value3");

//第一種:普遍使用,二次取值

system.out.println("通過map.keyset遍歷key和value:");

for (string key : map.keyset())

//第二種

system.out.println("通過map.entryset使用iterator遍歷key和value:");

iterator> it = map.entryset().iterator();

while (it.hasnext())

//第三種:推薦,尤其是容量大時

system.out.println("通過map.entryset遍歷key和value");

for (map.entryentry : map.entryset())

//第四種

system.out.println("通過map.values()遍歷所有的value,但不能遍歷key");

for (string v : map.values())

遍歷Map的四種方法

public static void main string args 第二種 system.out.println 通過map.entryset使用iterator遍歷key和value iterator it map.entryset iterator while it.hasnext 第三種 ...

遍歷Map的四種方法

第一種 普遍使用,二次取值 system.out.println 通過map.keyset遍歷key和value for string key map.keyset 第二種 system.out.println 通過map.entryset使用iterator遍歷key和value iterator...

遍歷Map的四種方法

public static void main string args 第二種 system.out.println 通過map.entryset使用iterator遍歷key和value iterator it map.entryset iterator while it.hasnext 第三種 ...