小弟在看hashmap的数据结构时 :有篇文章说他是有数组和链表组成的
其中有一句话 “数组中的元素,它持有一个指向下一个元素的引用,这就构成了链表。”
我还是不是很明白链表到底是啥样的?
和数组怎么结合起来的啊。

解决方案 »

  1.   

    链表到底是啥样的?
    re:可以去看看数据结构链表和数组怎么结合起来的啊
    re:数组每个元素里存的是链表的表头,有了表头就可以遍历整个链表
      

  2.   

    hashMap的结构类似这样
      元素0-->[hashCode=0, key.value=x1的数据]
      元素1-->[hashCode=1, key.value=y1的数据]
      
      元素n-->[hashCode=n, key.value=z1的数据]假设没有hashCode=1的元素加入,但是有两个hashCode=0的数据,它的结构就变成这样
      元素0-->[hashCode=0, key.value=x1的数据].next-->[hashCode=0, key.value=x2的数据]
      元素1-->[null]
      
      元素n-->[hashCode=n, key.value=z1的数据]原因就是因为 hashCode 是个有限映射,可能存在key值不同,但是hashCode相同的数据,所以把他们穿成链表,保证用hashCode可以找得到
      

  3.   

    看一下hash表解决冲突的方案吧,这种方式叫chaining,把h(key)相同的元素都挂到一个链表上
      

  4.   

     HashMap底层就是一个数组,数组里面的元素都是Entry, Entry这个类有个成员变量就是Entry本身的引用,引用中又有自身的引用 …… 这样构成链 看看源码就明白了。
      

  5.   

    先谢谢楼上的几位大哥。
    这张图可以大体的解释怎么集合起来的吗?
    还有这位朋友 clariones 表头可以理解为  
    元素0-->[hashCode=0, key.value=x1的数据]
    他中的 hashcode=0 吗?