hashmap数据结构

1.hashmap是由一个数组和多个单向链表或者红黑树组成。jdk1.8之后改成了,如果桶里面的数据大于8个会变成红黑树。小于6个会退化为单向链表。

2.在jdk1.7里面hashmap在put和resize操作的时候采用的头插法。jdk1.8采用的是尾插法。

3.hashmap当hash冲突的时候,采用生成单向链表的方式来保存冲突的数据,这是hashmap来解决hash冲突的方法。(就是所谓的拉链法)

 2.jdk1.7时hashmap头插法,当多线程时造成单向链表变成循环链表。循环链表使用时,进行查询操作A>B>A形成死循环。涉及到这个链表就会卡住。

jdk1.8两个线程同时对 HashMap 进行 put 操作,可能导致链表结构被破坏,出现数据丢失或覆盖的情况。采用尾插法,不会造成循环链表。

在JDK 1.7中,HashMap的死循环问题主要发生在多线程环境下,具体后果有:

CPU 过高: 死循环会导致线程无限制地占用CPU资源,从而导致CPU使用率飙升,影响系统性能。

程序卡死: 如果关键线程进入死循环,整个应用程序可能会卡住,无法继续处理其他任务。

数据丢失: 导致环形链表的形成,使得数据无法正确读取或修改,可能造成数据丢失或数据不一致。

内存泄漏: 死循环可能导致对象无法被及时回收,造成内存泄漏。

 

3其他技术解决hash冲突的方法

 

posted @ 2024-09-07 21:52  人在代码在  阅读(37)  评论(0)    收藏  举报