Java中的map有4个常用的实现类,分别是
HashMap
TreeMap
LinkedHashMap
ConcurrentHashMap
另外的HashTable作为Map的一个同步实现类,因为效率不高而且有ConcurrentHashMap作为更高效的同步Map实现,所以几乎很少使用。
所谓的有序无序和排序无关,而是指数据存入和取出的顺序是否一样,无序就是存入的顺序和取出的顺序不一样,反之就是有序。
4个实现类中,HashMap和ConcurrentHashMap是无序的,LinkedHashMap是有序的,而TreeMap会根据键进行升序排序。通过一段程序来看一下这几个类的有序和无序
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class MapSort { public static void main(String[] args) { //定义4个map Map<String,Object> hashmap = new HashMap<>(); Map<String,Object> treemap = new TreeMap<>(); Map<String,Object> linkedHashMap = new LinkedHashMap<>(); Map<String,Object> concurrentHashMap = new ConcurrentHashMap<>(); //key的数组 String[] keys = {"b","bb","c","cc","a","d","aa","dd"}; for (int i=0;i<keys.length;i++){ //为每一个map赋值 hashmap.put(keys[i],i); treemap.put(keys[i],i); linkedHashMap.put(keys[i],i); concurrentHashMap.put(keys[i],i); } System.out.println("hashmap = " + hashmap); System.out.println("treemap = " + treemap); System.out.println("linkedHashMap = " + linkedHashMap); System.out.println("concurrentHashMap = " + concurrentHashMap); } } |
结果输出
|
1 2 3 4 |
hashmap = {bb=1, cc=3, aa=6, dd=7, a=4, b=0, c=2, d=5} treemap = {a=4, aa=6, b=0, bb=1, c=2, cc=3, d=5, dd=7} linkedHashMap = {b=0, bb=1, c=2, cc=3, a=4, d=5, aa=6, dd=7} concurrentHashMap = {bb=1, cc=3, aa=6, dd=7, a=4, b=0, c=2, d=5} |
可以看出HashMap和ConcurrenthashMap键的顺序和keys数组的顺序不一样,也就是插入和读取的顺序不一样;LinkedHashMap是一致的;TreeMap则对键进行了自然排序。
对于Set集合,两个常用的实现类HashSet和TreeSet底层分别使用的HashMap和TreeMap,所以Set的有序和无序就和对应使用的Map一样了。
————————————————
版权声明:本文为CSDN博主「牛同学2333」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44416026/article/details/105051764