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

共 3053字,需浏览 7分钟

 ·

2020-09-30 11:38

点击蓝色“程序职场”关注我哟

加个“星标”,天天和你一起进步

先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索【程序职场】关注这个执着的职场程序员。
价值: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));               }                    }    }


文末送书

文末送书时刻!送的书分别是:

Node.js企业级应用开发实战(北京大学出版社提供 3本) 

Redis设计与实现 (机械工业出版社提供 1本)

在此感谢北京大学出版社机械工业出版社的支持。

送书规矩

从留言区中选中奖者,按照留言者的点赞,分享数选择,点赞,分享数高者获得书一本,累计送书 四本。时间截止9月18日的20点。

送的书籍


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


祝看完这篇文章的小伙伴收获满满!点个在看吧~~~三连来一波~~~

▎好文推荐

点击☞职场我们如何寻找自己的定位(职场)

点击☞没有资源和运营能力,如何开启副业之路(副业)

点击☞项目中怎么使用敏捷开发流程(敏捷)

点击☞【程序职场】第一期学习资料(java)
点击☞【程序职场】第二期学习资料(前端)


▎我的开源项目

点击☞一点知识学院(Spring boot 开源项目)(技能)

点击Eclipse项目如何导入IDEA正常启动(案例:一点知识学院)






关注 程序职场 在后台回复:学习资料,可获取一份 精心整理的最新 Java 技术干货。右下角点击 联系我 ->「加群学习」拉你进讨论群一起学习。


浏览 38
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报