-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTestHashMapMain.java
154 lines (134 loc) · 4.99 KB
/
TestHashMapMain.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package com.ds_algo.k_hashTable.hashMap;
import com.ds_algo.j_map.Map;
import com.ds_algo.j_map.TreeMap;
import com.ds_algo.k_hashTable.model.Key;
import com.ds_algo.k_hashTable.model.SubKey1;
import com.ds_algo.k_hashTable.model.SubKey2;
import com.tool.common.Asserts;
import com.tool.common.TimeTool;
import com.tool.common.file.FileInfo;
import com.tool.common.file.Files;
public class TestHashMapMain {
public static void main(String[] args) {
test1();
test2(new HashMap<>());
test3(new HashMap<>());
test4(new HashMap<>());
test5(new HashMap<>());
test2(new LinkedHashMap<>());
test3(new LinkedHashMap<>());
test4(new LinkedHashMap<>());
test5(new LinkedHashMap<>());
java.util.HashMap<String, String> map;
// java.util.LinkedHashMap<String, String> map2;
}
static void test1Map(Map<String, Integer> map, String[] words) {
TimeTool.check(map.getClass().getName(), new TimeTool.Task() {
@Override
public void execute() {
for (String word : words) {
Integer count = map.get(word);
count = count == null ? 0 : count;
map.put(word, count + 1);
}
System.out.println(map.size()); // 17188
// int count = 0;
// for (String word : words) {
// Integer i = map.get(word);
// count += i == null ? 0 : i;
// map.remove(word);
// }
// Asserts.test(count == words.length);
// Asserts.test(map.size() == 0);
}
});
}
static void test1() {
String filePath = "/Users/tiny/Desktop/java_src/java/util";
FileInfo fileInfo = Files.read(filePath, null);
String[] words = fileInfo.words();
System.out.println("总行数:" + fileInfo.getLines());
System.out.println("单词总数:" + words.length);
System.out.println("-------------------------------------");
test1Map(new TreeMap<>(), words);
test1Map(new HashMap<>(), words);
test1Map(new LinkedHashMap<>(), words);
}
static void test2(HashMap<Object, Integer> map) {
for (int i = 1; i <= 20; i++) {
map.put(new Key(i), i);
}
// map.print();
for (int i = 5; i <= 7; i++) {
map.put(new Key(i), i + 5);
}
Asserts.test(map.size() == 20);
Asserts.test(map.get(new Key(4)) == 4);
Asserts.test(map.get(new Key(5)) == 10);
Asserts.test(map.get(new Key(6)) == 11);
Asserts.test(map.get(new Key(7)) == 12);
Asserts.test(map.get(new Key(8)) == 8);
}
static void test3(HashMap<Object, Integer> map) {
map.put(null, 1); // 1
map.put(new Object(), 2); // 2
map.put("jack", 3); // 3
map.put(10, 4); // 4
map.put(new Object(), 5); // 5
map.put("jack", 6);
map.put(10, 7);
map.put(null, 8);
map.put(10, null);
Asserts.test(map.size() == 5);
Asserts.test(map.get(null) == 8);
Asserts.test(map.get("jack") == 6);
Asserts.test(map.get(10) == null);
Asserts.test(map.get(new Object()) == null);
Asserts.test(map.containsKey(10));
Asserts.test(map.containsKey(null));
Asserts.test(map.containsValue(null));
Asserts.test(map.containsValue(1) == false);
}
static void test4(HashMap<Object, Integer> map) {
map.put("jack", 1);
map.put("rose", 2);
map.put("jim", 3);
map.put("jake", 4);
map.remove("jack");
map.remove("jim");
for (int i = 1; i <= 10; i++) {
map.put("test" + i, i);
map.put(new Key(i), i); // key的hash相等的但不equals。所以不是同一个key
}
for (int i = 5; i <= 7; i++) {
Asserts.test(map.remove(new Key(i)) == i);
}
for (int i = 1; i <= 3; i++) {
map.put(new Key(i), i + 5);
}
Asserts.test(map.size() == 19);
Asserts.test(map.get(new Key(1)) == 6);
Asserts.test(map.get(new Key(2)) == 7);
Asserts.test(map.get(new Key(3)) == 8);
Asserts.test(map.get(new Key(4)) == 4);
Asserts.test(map.get(new Key(5)) == null);
Asserts.test(map.get(new Key(6)) == null);
Asserts.test(map.get(new Key(7)) == null);
Asserts.test(map.get(new Key(8)) == 8);
map.traversal(new Map.Visitor<Object, Integer>() {
public boolean visit(Object key, Integer value) {
System.out.println(key + "_" + value);
return false;
}
});
}
static void test5(HashMap<Object, Integer> map) {
for (int i = 1; i <= 20; i++) {
map.put(new SubKey1(i), i);
}
map.put(new SubKey2(1), 5);
Asserts.test(map.get(new SubKey1(1)) == 5);
Asserts.test(map.get(new SubKey2(1)) == 5);
Asserts.test(map.size() == 20);
}
}