集合
文章平均质量分 73
集合
weixin_46248981
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap有什么了解
1.ConcurrentHashMap的实现原理是什么?JDK1.7中的ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成,即ConcurrentHashMap把哈希桶切成小数组(Segment),每个小数组有n个HashEntry组成。其中,Segment继承了ReetrantLock,所以Segment是一种可重入锁,扮演锁的角色,HashEntry用于存储键值对数据。首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段原创 2021-07-06 10:12:57 · 106 阅读 · 0 评论 -
对HashMap有什么了解吗?
1.HashMap的数据结构在JDK1.7和JDK1.8有所差别:在JDK1.7中,由“数组+链表”组成,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。在JDK1.8中,由“数组+链表+红黑树”组成。当链表过长,则会严重影响HashMap的性能,红黑树搜索时间复杂度是O(logn),而链表则是糟糕的O(n)。因此JDK1.8对数据结构做了进一步的优化,引入了红黑树,链表和红黑树达到一定条件会进行转换。当链表超过8且数据量超过64才会转换红黑树。将链表转换成红黑树前会判断,如果当原创 2021-07-05 22:17:08 · 549 阅读 · 13 评论 -
什么是Fail-Fast机制和Fail-safe
Fail-Fast是Java集合的一种错误检测机制。当遍历集合的同时修改集合或者多个线程对集合进行结构上的改变的操作时,有可能会产生fail-fast机制。会抛出ConcurrentModificationException异常集合的迭代器在调用next()、remove()方法时都会调用checkForComodification()方法,该方法主要就是检测modCount==expectedModCount?若不等则抛出ConcurrentModificationException异常,从而产生f原创 2021-04-10 22:24:13 · 98 阅读 · 0 评论 -
ArrayList与LinkedList区别
1.底层数据结构:ArrayList底层用的是Object数组,LinkedList底层使用的是双向链表数据结构(JDK1.6之前为双向循环链表,1.7之后为双向链表)2.插入和删除是否受元素位置影响ArrayList采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。插入列表末尾的话,时间复杂度就是O(1),如果插入指定位置i的话时间复杂度就为O(n-i)LinkedList采用链表存储,所以对应插入删除不受位置影响,插入尾部时间复杂度为O(1),插入指定位置需要先移动到指定位置,时间复原创 2021-04-10 22:18:41 · 74 阅读 · 0 评论 -
ArrayList的扩容机制
public class ArrayList<E> extends AbstractList<E> implemtns ist<E>,RandomAccess,Cloneable,java.io.Serializable{ //版本号 private static final long serialVersionUID = 8683452581122892189L; //默认容量 private static final int DEFAULT_CAPACITy原创 2021-04-10 20:35:01 · 105 阅读 · 0 评论 -
HashMap
1.HashMap集合的底层数据就够JDK8之前:HashMap是采取数组加链表形式的链表散列。HashMap通过key的HashCOde值经过扰动函数得到hash值,然后通过hash&(n-1)判断当前元素的存放位置。如果该位置存在元素的话,就判断该元素与要存入的元素的hash值以及key值是否相同,如果相同的话,直接覆盖,如果不相同的话则采用拉链法解决哈希冲突。扰动函数:指HashMap的Hash方法,使用扰动函数的目的是可以减少哈希碰撞。拉链法:将链表和数组结合,也就是创建一个链表数组原创 2021-04-08 22:24:56 · 73 阅读 · 0 评论