Java中toString()中的StringBuilder vs String串联?推荐 | Java Debug 笔记

797 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

“HashMap,LinkedHashMap和TreeMap之间的区别?

是什么区别HashMap,LinkedHashMap而TreeMap在Java中?我没有看到输出的任何差异,因为这三个都有keySet和values。什么是Hashtables?

Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet()); 
print(m1.values()); 

SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet()); 
print(sm.values());

LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet()); 
print(lm.values());

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

所有这三个类都实现了该Map接口,并提供了几乎相同的功能。最重要的区别是通过条目进行迭代的顺序:

HashMap绝对不保证迭代顺序。添加新元素时,它甚至可以(并且将)完全改变。 TreeMap将根据key的“自然顺序”(根据其compareTo()方法)(或外部提供的Comparator)进行迭代。此外,它实现了SortedMap接口,该接口包含依赖于此排序顺序的方法。 LinkedHashMap 将按照将条目放入map的顺序进行迭代

“哈希表”是基于哈希的映射的通用名称。在Java API的上下文中,Hashtable是从Java 1.1到集合框架存在之前的过时的类。不再使用它,因为它的API充满了重复功能的过时方法,并且其方法是同步的(这可能会降低性能,并且通常是无用的)。使用ConcurrentHashMap而不是Hashtable。

高分回答:

这三个代表从唯一键到值的映射,因此实现了Map接口。

HashMap是基于键哈希的映射。它支持O(1)的get / put操作。密钥必须具有一致的实现,hashCode()并且equals()才能正常工作。

LinkedHashMap与HashMap非常相似,但是它增加了添加(或访问)项目的顺序的意识,因此迭代顺序与插入顺序(或访问顺序,取决于构造参数)相同。

TreeMap是基于树的映射。其放置/获取操作花费O(log n)时间。它要求项目具有可比较或比较器的某种比较机制。迭代顺序由此机制确定。

文章翻译自 yl2gl72eozkinivz3vc6swkesy-ac4c6men2g7xr2a-translate.translate.goog/questions/2…

作者建议:

hashmap很多讲的,比如jdk1.7的头插法成环问题,1.8解决的尾插法,hashmap的初始容量,扩容,hash算法、线程安全问题(concurrentHashMap-cas+sync), 还有一个就是计算size.

JDK1.8 size 是通过对 baseCount 和 counterCell 进行 CAS 计算,最终通过 baseCount 和 遍历 CounterCell 数组得出 size。主要是思想通过数组的方式,提高了吞吐。

建议读几遍源码,加深印象。

欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!! \color{red}欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!!{~}

有最新、优雅的实现方式,我也会在文末写出我对本问答的见解 \color{red}有最新、优雅的实现方式,我也会在文末写出我对本问答的见解{~}

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️