3種場景不同方法遍歷Map集合的效率比較

2021-10-19 17:38:10 字數 4398 閱讀 2974

只遍歷 key

只遍歷 value

測試結果

小結

//hashmap1:大小為1000000,

//key和value的值均為string,

//key的值為1、2、3.........1000000

mapmap1 =

newhashmap

();string key1,value1;

for(

int i=

1;i<=

1000000

;i++

)//hashmap2:大小為1000000,

//key和value的值為string,

//key的值為50、100、150........50000000

mapmap2 =

newhashmap

();string key2,value2;

for(

int i=

1;i<=

1000000

;i++

)

public

static

long

keyset_iterator

(map

map)

long endtime1 =system.

currenttimemillis()

;return endtime1-starttime1;

}

public

static

long

keyset_for

(map

map)

long endtime2 =system.

currenttimemillis()

;return endtime2-starttime2;

}

public

static

long

entryset_iterator

(map

map)

long endtime3 =system.

currenttimemillis()

;return endtime3-starttime3;

}

public

static

long

entryset_for

(map

map)

long endtime4 =system.

currenttimemillis()

;return endtime4-starttime4;

}

public

static

long

keyset_iterator

(map

map)

long endtime1 =system.

currenttimemillis()

;return endtime1-starttime1;

}

public

static

long

keyset_for

(map

map)

long endtime2 =system.

currenttimemillis()

;return endtime2-starttime2;

}

public

static

long

entryset_iterator

(map

map)

long endtime3 =system.

currenttimemillis()

;return endtime3-starttime3;

}

public

static

long

entryset_for

(map

map)

long endtime4 =system.

currenttimemillis()

;return endtime4-starttime4;

}

public

static

long

keyset_iterator

(map

map)

long endtime1 =system.

currenttimemillis()

;return endtime1-starttime1;

}

public

static

long

keyset_for

(map

map)

long endtime2 =system.

currenttimemillis()

;return endtime2-starttime2;

}

public

static

long

entryset_iterator

(map

map)

long endtime3 =system.

currenttimemillis()

;return endtime3-starttime3;

}

public

static

long

entryset_for

(map

map)

long endtime4 =system.

currenttimemillis()

;return endtime4-starttime4;

}

public

static

values_iterator

(map

map)

long endtime5 =system.

currenttimemillis()

;return endtime5-starttime5;

}

public

static

values_for

(map

map)

long endtime6 =system.

currenttimemillis()

;return endtime6-starttime6;

}

同時遍歷 key+value

資料量小

資料量大

keyset利用iterator遍歷

124ms

126ms

keyset利用for遍歷

105ms

113ms

entryset利用iterator遍歷

80ms

100ms

entryset利用for遍歷

78ms

103ms

只遍歷 key

資料量小

資料量大

keyset利用iterator遍歷

97ms

118ms

keyset利用for遍歷

93ms

114ms

entryset利用iterator遍歷

95ms

115ms

entryset利用for遍歷

95ms

113ms

只遍歷 value

資料量小

資料量大

keyset利用iterator遍歷

125ms

146ms

keyset利用for遍歷

114ms

140ms

entryset利用iterator遍歷

102ms

120ms

entryset利用for遍歷

104ms

121ms

values利用iterator遍歷

97ms

124ms

values利用for遍歷

107ms

114ms

map的key採用簡單形式和複雜形式時,查詢的效率是不同的,簡單的key值效率更高

當資料量大的時候,採用entryset遍歷key+value的效率要高於keyset

這也是為什麼「大家建議使用entryset,認為entryset對於大資料量的查詢來說,速度更快」

當我們只需要取得value值時,採用values來遍歷效率更高

不同方式遍歷Map集合(全)

public static void main string args 第一種方法 通過map.keyset遍歷key和value for string key map.keyset 第二種方法 通過map.entryset和迭代器遍歷map iterator car map.entryset in...

遍歷Map集合的4種方法

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

Map 集合遍歷的4種方法

ap 集合初始化時,指定集合初始值大小。說明 hashmap 使用 hashmap int initialcapacity 初始化。正例 initialcapacity 需要儲存的元素個數 負載因子 1。注意負載因子 即 loade ctor 預設為 0.75,如果暫時無法確定初始值大小,請設定為 ...