java集合框架(三)——映射

来源:互联网 发布:js保存cookie到本地 编辑:程序博客网 时间:2024/05/22 11:41


Map 


一、HashMap


1、实际上是一个“链表散列”,就是链表和数组的结合体,底层是一个数据结构(Entry<K,V>[] table),数组每一项是一个链表

transient Entry<K,V>[] table;     static class Entry<K,V> implements Map.Entry<K,V> {          final K key;          V value;          Entry<K,V> next;</span>          int hash;            /**          * Creates new entry.          */          Entry(int h, K k, V v, Entry<K,V> n) {              value = v;              next = n;              key = k;              hash = h;          }            public final K getKey() {              return key;          }            public final V getValue() {              return value;          }          .............  }  


2、HashMap的性能参数

//默认初始容量,必须是2的倍数;

static final int DEFAULT_INITIAL_CAPACITY = 16;

//最大容量

static final int MAXIMUM_CAPACITY = 1 << 30;

//默认负载因子(HashMap中元素达到这个比例时,进行扩容)

static final float DEFAULT_LOAD_FACTOR = 0.75f;

//capacity * load factor 当容器中元素个数到达这个值时,进行扩容resize

int threshold;

//用户设定的负载因子

final float loadFactor;

//For fast-fail机制:HashMap(非线程安全的)的修改次数,iterator遍历时,检测这个值,有变化,抛出//ConcurrentModificationException

transient int modCount;

//map中存储数据的数组,HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry对象。

transient Entry<K,V>[] table;


a、负载因子衡量的是一个散列表的空间的使用程度,负载因子越大表示散列表的装填程度越高,反之愈小。

b、因此如果负载因子越大,对空间的利用更充分,然而后果是查找效率的降低;如果负载因子太小,那么散列表的数据将过于稀疏,对空间造成严重浪费。

c、默认的的负载因子0.75是对空间和时间效率的一个平衡选择。当容量超出此最大容量时,resize后的HashMap容量是容量的两倍。


3、HashMap的操作分析:

<1>、indexfor函数根据hash和length计算出元素位置,通过h&(length-1)返回,而length都是2的倍数,性能上的提高

<2>、hash增加高位运算


java8新增特性—lambda表达式

public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() {            return (Comparator<Map.Entry<K, V>> & Serializable)                (c1, c2) -> c1.getKey().compareTo(c2.getKey());        }

二、TreeMap


基于红黑树实现,源码分析得其属性包括根节点、结点数、排序器、fail-fast属性(快速失败机制),共有13个内部类


构造函数有四种:1、空的使用键的自然顺序;2、提供排序器;3、提供参数,自然顺序;4、提供参数,提供排序器;


三、LinkedHashMap


扩展了HashMap,依元素插入的顺序维持元素的映射链表,linked提供双向链表



四、IdentityHashMap类、EnumMap类不详






0 0
原创粉丝点击