七叶笔记 » golang编程 » java常用map

java常用map

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

相关文章