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

先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索【程序职场】关注这个执着的职场程序员。
价值:Java技能,面试经验指导,简历优化,职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验。

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));               }                    }       }

我是【尔东双月】一枚执着的职场程序员,微信搜索【程序职场】关注我。别忘了三连啊,点赞、收藏、留言,随意给,我不挑。
知乎号: 程序职场
CSDN:程序职场
注:如果文章有任何问题,欢迎毫不留情地指正。

猜你喜欢

转载自blog.csdn.net/jianpengxuexikaifa/article/details/108679677
今日推荐