Thinking in java自读笔记:HashMap,TreeMap和Hashtable

HashMap于HashTable的异同:
相同点:HashMap和Hashtabel的存储元素都是键值对,实现原理都是哈希表。
主要不同点:
1.继承父类不同,Hashtable继承与Dictionary(已废弃),HashMap继承于AbstractMap
2.Hashtable是线程安全的,HashMap是非线程安全的,不过如今即便使用多线程也不推荐使用Hashtable,可以使用ConcurrentHashMap来代替。
3.Hashtable的初始大小为11,每次扩容的大小为2*n+1,HashMap的初始大小为16,每次扩容的大小为2的幂次方。
4.计算hash值方式不同,Hashtable直接处理hashCode()的值进行模运算,HashMap通过移位运算,因为移位运算比模运算效率高,因此HashMap在访问效率上比Hashtabel好。
Hashtable计算哈希值方式:
这里写图片描述
HashMap计算哈希值方式:
这里写图片描述

这里写图片描述
5.Hashtable在put时,键值都不能为null,HashMap的键值都可以为null。

HashMap于TreeMap的异同
相同点:HashMap于TreeMap都继承于AbstractMap,储存元素都是键值对
不同点:
1.HashMap的实现原理是哈希表,TreeMap的实现原理是红黑树,HashMap在初始化时可以优化(设置一个理想的初始容量大小),TreeMap不能。
2.HashMap的key值比较是通过equals()和hashCode()来确定的,TreeMap是通过compare()比较器或者compareTo()方法来比较的。
3.HashMap不能保证元素顺序,TreeMap实现了SortedMap接口,因此保证了元素的顺序。
4.HashMap的删除,删除,查找几乎没有性能损耗,TreeMap的插入与删除性能损耗大,因为要保证红黑树的平衡性,需要多次旋转等操作,查找也因为树形结构的局限性没有哈希表快。

猜你喜欢

转载自blog.csdn.net/qq_27368993/article/details/82685384