March 
	   1st,
	     
	   2016
	 
	  
	   
		
		
		  
		
		
		  
		
		
      
      
    
    
		
		
	
	
	
在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
  
/** 
 * The table, resized as necessary. Length MUST Always be a power of two. 
 */  
transient Entry[] table;  
  
static class Entry<K,V> implements Map.Entry<K,V> {  
    final K key;  
    V value;  
    Entry<K,V> next;  
    final int hash;  
    ……  
}  可以看出,Entry就是数组中的元素,每个 Map.Entry 其实就是一个key-value对,它持有一个指向下一个元素的引用,这就构成了链表。
添加元素时,根据key的hash值得到这个元素在数组中的位置,把元素放到对应的位置上。 如果这个位置上有其他元素则以链表的形式存放,新进的放在链头,之前的放在链尾。 取元素时,先通过key的hash获取数组位置,再通过key的equals方法获取链表中的元素。
如果数组的大小不足以存放元素时,就需要进行扩容(resize),此操作非常消耗性能应尽量避免。