常用Map集合包括:HashMap,HashTable,LinkedHashMap,TreeMap
HashMap与HashTable:
HashTable是线程安全的,它的key与value不允许为null值。HashMap则允许key或value为null,HashMap与HashTable对key的hash算法和hash值到内存的映射算法不同。
HashMap的数据结构:HashMap底层使用数组实现,数组内存储Entry对象,这也是Map迭代时可以使用Map.Entry的原因。Entry对象包含了key,value,hash,next。next指向另外一个Entry,因此HashMap实际上是一个链表的数组。当Map的put()方法产生冲突时,新的值会替换旧值,同时next指向旧值,这样在一个数组索引空间存放多个值。
HashMap的构造方式:HashMap构造时可以指定其数组的容量参数,和负载因子,默认情况其容量为16,负载因子为0.75,同时内部维护一个thresHold阈值,为负载因子*当前数组容量,当实际存入的元素个数超过阈值时,HashMap会进行扩容,因此HashMap的填充比不会超过负载因子,合理的指定容量与负载因子,减少hash冲突,可以提高HashMap的操作效率。
有序的HashMap---LinkedHashMap:
LinkedHashMap在继承HashMap基础上,维护了一个链表,依据构造函数参数LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder),维护两种内部元素的顺序,