HashMap的四種遍歷以及耗時對比
1.method1
public static void method1(Map<String, Object> map) {
getTime();
Set<String> keySet = map.keySet();//鍵集合
Iterator<String> it = keySet.iterator();//迭代器
while(it.hasNext()) {
String key = it.next();
Object value = map.get(key);
// System.out.println(key+"_"+value);
}
getTime();
}
2.method2
public static void method2(Map<String,Object> map) {
getTime();
for(String key : map.keySet()) {
Object value = map.get(key);
// System.out.println(key+"_"+value);
}
getTime();
}
3.method3
public static void method3(Map<String,Object> map) {
getTime();
Set<Entry<String, Object>> entrySet = map.entrySet();
Iterator<Entry<String, Object>> it = entrySet.iterator();
while(it.hasNext()) {
Entry<String, Object> next = it.next();
String key = next.getKey();
Object value = next.getValue();
// System.out.println(key+"_"+value);
}
getTime();
}
4.method4
public static void method4(Map<String,Object> map) {
getTime();
for(Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
// System.out.println(key+"_"+value);
}
getTime();
}
5.耗時對比
進行簡單的數據量遍歷測試,遍歷時間應該與電腦性能不同有差異(嘗試1000W時,電腦性能已經不夠了,各位可以自行測試)。時間差單位ms。
遍歷耗時方法對比
數據量 |
5W |
50W |
500W(3次) |
method1 |
8 |
25 |
203-180-178 |
method2 |
11 |
24 |
201-198-187 |
method3 |
10 |
21 |
145-137-136 |
method4 |
9 |
21 |
151-135-136 |
6.整體代碼
package hashMap;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
*
* @author wsz
* @date 2017年12月12日
耗時單位ms
----------------------------------
數據量 5W 50W 500W
----------------------------------
method1 8 25 203-180-178
----------------------------------
method2 11 24 201-198-187
----------------------------------
method3 10 21 145-137-136
----------------------------------
method4 9 21 151-135-136
----------------------------------
*/
public class Demo1 {
public static void main(String[] args) {
Map<String,Object> map = new HashMap<String, Object>();
long size = 10000000L;
for(int i = 0; i < size ;i++) {
map.put(String.valueOf(i), i);
}
method1(map);
method2(map);
method3(map);
method4(map);
}
public static void method1(Map<String, Object> map) {
getTime();
Set<String> keySet = map.keySet();//鍵集合
Iterator<String> it = keySet.iterator();//迭代器
while(it.hasNext()) {
String key = it.next();
Object value = map.get(key);
// System.out.println(key+"_"+value);
}
getTime();
}
public static void method2(Map<String,Object> map) {
getTime();
for(String key : map.keySet()) {
Object value = map.get(key);
// System.out.println(key+"_"+value);
}
getTime();
}
public static void method3(Map<String,Object> map) {
getTime();
Set<Entry<String, Object>> entrySet = map.entrySet();
Iterator<Entry<String, Object>> it = entrySet.iterator();
while(it.hasNext()) {
Entry<String, Object> next = it.next();
String key = next.getKey();
Object value = next.getValue();
// System.out.println(key+"_"+value);
}
getTime();
}
public static void method4(Map<String,Object> map) {
getTime();
for(Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
// System.out.println(key+"_"+value);
}
getTime();
}
public static void getTime() {
System.out.println(System.currentTimeMillis());
}
}