一、Map父接口
-
Map接口的特点:
-
用于存储任意键值对(Key -Value)
-
键:无序、无下标、不允许重复(唯一)
-
值:无序、无下标、允许重复
-
-
方法:
-
V put(K key,V value); //将对象存入到集合中,关联键值。key重复则覆盖原值。
-
Object get(Object key); //根据键获取对应的值
-
KeySet<K> ; //返回所有key
-
Collection<V> values(); //返回包含所有值的Collection集合
-
EntrySet<Map.Entry<K,V>>; //键值匹配的Set集合
-
二、Map集合的实现类
-
HashMap
-
JDK1.2版本,线程不安全,运行效率快;允许用null作为key或是value
-
初始容量16,默认加载因子0.75(超过百分之七十五就扩容),扩容为原来大小的一倍,也就是32
-
存储结构:哈希表(数组+链表+1.8之后的红黑树)
-
使用key的hashCode和equals作为重复依据
-
当链表的长度大于8,数组的长度大于64,就会把该节点转换为红黑树
-
1.8之前链表头插入,之后尾插入
-
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 HashMap初始容量大小 static final int MAXIMUM_CAPACITY = 1 << 30;//HashMap的数组最大容量 static final float DEFAULT_LOAD_FACTOR = 0.75f;//默认加载因子 static final int TREEIFY_THRESHOLD = 8; //jdk1.8 当链表长度大于8时,调整成红黑树 static final int UNTREEIFY_THRESHOLD = 6; //jdk1.8 当链表长度小于6时,调整成链表 static final int MIN_TREEIFY_CAPACITY = 64; //jdk1.8 当链表长度大于8并且集合元素个数大于等于64时,调整成红黑树 transient Node<K,V>[] table; //哈希表中的数组 size();//元素个数
-
HashTable:
-
JDK1.0版本,线程安全,运行效率慢;不允许null作为key或是value
-
-
Properties:
-
Hashtable的子类,要求key和value都是String,通常用作配置文件的读取
-
-
TreeMap:
-
实现了SortedMap接口(是Map的子接口),可以对key自动排序
-
要求添加元素时,必须重写Comparable接口,也可以在创建时使用Comparator实现类
-