当前位置: 首页 > 科技观察

比较HashMap、HashTable、TreeMap的区别?很多人不知道

时间:2023-03-19 22:50:33 科技观察

本文转载自微信公众号《程序员漫画编程》,作者程序职场。转载本文请联系程序员漫画编程公众号。01概念HashMapHashMap实现了Map接口,继承了AbstractMap,是基于哈希表实现Map接口。HashMap是一种引用数据类型。HashtableHashtable:是Map接口的另一个实现类。它在用法上与HashMap类似,但也有区别。treeMapTreeMap:基于红黑树的NavigableMap实现。映射根据其键的自然顺序进行排序,或者根据创建映射时提供的比较器进行排序,具体取决于所使用的构造函数。02区别1、HashTable的方法是同步的,而HashMap是不同步的,所以在多线程的情况下,需要手动同步HashMap。这种区别就像Vector和ArrayList一样。2、HashTable不允许空值,key和value都不允许,HashMap允许空值,key和value都可以。3.HashTable有一个contains(Objectvalue)函数,和containsValue(Objectvalue)是一样的。4、HashTable使用Enumeration,HashMap使用Iterator。5、HashTable中哈希数组默认大小为11,增加方式为old*2+1。HashMap中hash数组的默认大小是16,必须是2的索引。6.hash值的用途不同。HashTable直接使用对象的hashCode。7、三者都实现了Map接口。03安全1.HashMap是一个不安全的线程。它允许Key值出现一次null,而Value值无数次出现Null。2.Hashtable是一个安全的线程。它不仅实现了Map接口,还实现了Dictionary接口。Null3.treeMap不允许出现在其键和值中。它不是线程安全的,可以排序。默认情况下,它根据键的自然顺序按升序排序。如果要按降序排序,则需要构造集合。通过比较器。04关图05实例应用classHashMaps{publicstaticvoidmain(String[]args){Mapmap=newHashMap();map.put(“a”,“aaa”);map.put(“b”,“bbb”);map.put("c","ccc");map.put("d","ddd");Iteratoriterator=map.keySet().iterator();while(iterator.hasNext()){Objectkey=iterator.next();System.out.println(“map.get(key)is:”+map.get(key));}Hashtabletab=newHashtable();tab.put(“a”,“aaa”);tab.put("b","bbb");tab.put("c","ccc");tab.put("d","ddd");Iteratoriterator_1=tab.keySet().iterator();while(iterator_1.hasNext()){Objectkey=iterator_1.next();System.out.println(“tab.get(key)is:”+tab.get(key));}TreeMaptmp=newTreeMap();tmp。put(“a”,“aaa”);tmp.put(“b”,“bbb”);tmp.put(“c”,“ccc”);tmp.put(“d”,“ddd”);Iteratoriterator_2=tmp.keySet().iterator();while(iterator_2.hasNext()){Objectkey=iterator_2.next();System.out.println(“tmp.get(key)is:”+tmp.get(key));}}}