HashMap:最常用的map,效率很高,不支持多线程并发修改
TreeMap:按照key值升序,不支持多线程并发修改
ConcurrentHashMap:通过分段的方式实现多线程并发修改,但是不是按照key值排序
ConcurrentSkipListMap:使用跳表数据结构实现key值排序,支持多线程并发修改
跳表将索引分成多层,并且每一层的数量又可以不是2(区别于二叉树),减少层次获得了更高的遍历效率;
维护了多个链表,插入数据也可以将修改限制在一定范围内,减少了锁的范围.
示例代码
public static void main(String[] args) {
Map<String,Object> concurrentHashMap = new ConcurrentHashMap<>();
initMap(concurrentHashMap);
printMap(concurrentHashMap);
System.out.println(“——-“);
Map<String,Object> treeMap = new TreeMap<>();
initMap(treeMap);
printMap(treeMap);
System.out.println(“——-“);
Map<String,Object> concurrentSkipListMap = new ConcurrentSkipListMap<>();
initMap(concurrentSkipListMap);
printMap(concurrentSkipListMap);
}
static void printMap(Map<?,?> map) {
for(Map.Entry<?,?> entry:map.entrySet()) {
System.out.println(entry.getKey()+”@”+entry.getValue());
}
}
static void initMap(Map<String,Object> map) {
map.put(“26″,”z”);
map.put(“25″,”y”);
map.put(“4″,”d”);
map.put(“3″,”c”);
map.put(“1″,”a”);
}
输出
1@a
25@y
3@c
26@z
4@d
——-
1@a
25@y
26@z
3@c
4@d
——-
1@a
25@y
26@z
3@c
4@d