java中jdk1.8之前HashMap是由List+链表组成的,为什么要这么设计有什么优缺点,链表是什么,要求新手看的懂,结合案例分析,list又是什么
时间: 2023-05-25 10:06:18 浏览: 124
HashMap在1.8版本之前的实现中,使用的是数组和链表相结合的方式实现的。具体地说,每个数组元素都是一个链表的头节点,每个链表中存储了一些键值对。哈希函数将键映射到数组的下标位置,然后根据链表的遍历方式,找到相应的键值对。
这种实现方式的主要优点在于,可以解决哈希冲突的问题。由于哈希函数无法将每个键都映射到唯一的数组下标位置,所以可能发生哈希冲突,即多个键映射到了同一个数组下标位置。如果只是简单地将键值对存放在数组中,就会出现覆盖的情况。而使用链表可以解决这个问题,同一个数组下标位置上的多个键值对会存储在同一个链表中,不会互相覆盖。
然而,链表的缺点也很明显:当链表中存储的数据过多时,遍历链表的时间会很长,这会导致HashMap的性能下降。因此,在1.8版本之后,HashMap引入了红黑树的数据结构,用于优化链表过长的情况,提高遍历的效率。
List是Java中一种常见的数据结构,表示一个元素的有序集合。在HashMap中,链表就是一种单向的List。它的作用是将多个键值对存储在同一个数组下标位置上,实现链表的遍历查找,并解决哈希冲突的问题。对于HashMap的使用者而言,可以将它看做一个键值对的集合,通过键来访问和更新值。例如:
```
HashMap<String,Integer> hashMap = new HashMap<>();
hashMap.put("one",1);
hashMap.put("two",2);
hashMap.put("three",3);
Integer value = hashMap.get("two");
System.out.println(value); // output: 2
```
这段代码创建了一个HashMap对象,将三个键值对添加到里面。然后,通过get()方法获取"two"键对应的值,并将其输出到控制台上。
阅读全文