关系继承图
Map
存储元素的结构为Key-Value的键值对、存储顺序无序、元素(Key)不可重复、Key和Value存储的都是引用数据类型的内存地址
Hashtable
1、默认容器大小是11、默认加载因子是0.75f
2、线程安全、如果不需要实现线程同步、建议使用HashMap、少用(遗留类、内部优化不好和很多冗余)
3、扩容机制
在原来的基础之上2倍+1
properties是线程安全的 key和value都是String类型、properties被称为属性类。
HashMap
1、默认容器大小为16、默认加载因子0.75f
2、底层是一种哈希表的数据结构
在JDK8中如果 哈希表的单向链表元素超过8个以后就会变成红黑树数据结构、
当红黑树上节点少于6个时、会把红黑树变成单向链表的数据结构、
这种方式是为了提供检索效率、二叉树的检索会再次缩小检索范围提供效率
引用B站上老师的图解
3、Key和Value可用为null、且非线程安全
补充解决方案
new ConcurrentHashMap<>();
还可以使用 Java并发包下的concurrentHashmap
TreeMap
是一个非线程安全、集合的Key是按照大小排序的,数据的存储结构是一个二叉树。
补充红黑树
来源于另一位博主 wyqwi11iam