几个常见MAP的区别

HashMap:(extends AbstractMap implements Map)

数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,key的hash值是先计算key的hashcode值,然后再进行计算,每次容量扩容会重新计算所以key的hash值,会消耗资源,要求key必须重写equals和hashcode方法

默认初始容量16,加载因子0.75,扩容为旧容量乘2,查找元素快,如果key一样则比较value,如果value不一样,则按照链表结构存储value,就是一个key后面有多个value;
 

TreeMap:(extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable

基于红黑二叉树的NavigableMap的实现,线程非安全,不允许null,key不可以重复,value允许重复,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,两个相比较的key不得抛出classCastException。主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出

HashTable:(extends Dictionary implements Map

线程安全的,key和value都不允许出现null值。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashTable直接使用对象的hashCode作为Hash值

猜你喜欢

转载自blog.csdn.net/zhuyong7/article/details/81412941