对比 HashMap,HashTable,TreeMap区别?很多人不知道

本文转载自微信公众号「程序员漫画编程」,对比作者程序职场 。别多转载本文请联系程序员漫画编程公众号。知道   

01概念

HashMap

HashMap实现了Map接口,对比继承AbstractMap,别多它是知道基于哈希表的 Map 接口的实现。

HashMap是对比引用数据类型。

Hashtable

Hashtable:是别多Map接口的另外一个实现类,和HashMap用法类似,知道同时也有区别。对比

treeMap

TreeMap:基于红黑树(Red-Black tree)的别多 NavigableMap实现。该映射根据其键的知道自然顺序进行排序,或者根据创建映射时提供的对比Comparator进行排序,具体取决于使用的高防服务器别多构造方法。

02区别

1. HashTable的知道方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。

2. HashTable不允许null值,key和value都不可以,HashMap允许null值,key和value都可以。

3. HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。

4. HashTable使用Enumeration,HashMap使用Iterator。

5. HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是站群服务器2的指数。

6. 哈希值的使用不同,HashTable直接使用对象的hashCode。

7,这三个都对Map接口进行了实现

03安全性

1.HashMap是不安全的线程,他允许Key值出现一次null Value值出现无数次的Null

2.Hashtable是安全的线程,他不仅实现了Map接口也实现了Dictionary接口,他的key值与Value值都不允许出现Null

3.treeMap 非线程安全 可以进行排序的,默认按照键的自然顺序进行升序排序,若要进行降序排序则需要在构造集合时候传递一个比较器。

04关系图

05实例应用

class  HashMaps    {            public static void main(String[] args)           {                 Map map=new HashMap();                            map.put(“a”, “aaa”);                map.put(“b”, “bbb”);                map.put(“c”, “ccc”);                map.put(“d”, “ddd”);                Iterator iterator = map.keySet().iterator();                            while (iterator.hasNext()) {                  Object key = iterator.next();                 System.out.println(“map.get(key) is :”+map.get(key));                }                      Hashtable tab=new Hashtable();                            tab.put(“a”, “aaa”);                tab.put(“b”, “bbb”);                tab.put(“c”, “ccc”);                tab.put(“d”, “ddd”);                Iterator iterator_1 = tab.keySet().iterator();                while (iterator_1.hasNext()) {                  Object key = iterator_1.next();                 System.out.println(“tab.get(key) is :”+tab.get(key));                }             TreeMap tmp=new TreeMap();                            tmp.put(“a”, “aaa”);                tmp.put(“b”, “bbb”);                tmp.put(“c”, “ccc”);                tmp.put(“d”, “ddd”);                Iterator iterator_2 = tmp.keySet().iterator();                while (iterator_2.hasNext()) {                  Object key = iterator_2.next();                 System.out.println(“tmp.get(key) is :”+tmp.get(key));                }                     }        } 服务器租用
滇ICP备2023000592号-31