Java集合
文章平均质量分 84
阿振_
这个作者很懒,什么都没留下…
展开
-
Java集合之ArrayList
ArrayList底层数据结构是数组,能够高效的在指定位置上进行查找、修改,但是对于插入操作效率不是很高。如果向列表末尾插入元素,当底层数组容量不足以容纳时,需要进行扩容操作。当在指定位置插入时,需要将指定位置以及之后的元素往后移动,腾出位置给新加入的元素。 底层数据结构: private static final int DEFAULT_CAPAC原创 2018-01-24 21:23:15 · 155 阅读 · 0 评论 -
Java集合之LinkedList
LinkedList底层实现就是(双向)链表,包括链表节点的插入、删除、修改等一系列操作。与数组实现的ArrayList相比,在链表中查找的效率要低很多,但是向表中插入、删除等操作效率就要高得多了。LinkedList在实现了List接口的同时,又实现了Queue、Deque接口,也就是说LinkedList还能够实现(双端)队列(FIFO)、栈(LIFO)的功能。 底层原创 2018-01-25 10:34:37 · 256 阅读 · 0 评论 -
Java集合之HashMap resize操作
Java中的HashMap采用链地址法(数组+链表)解决哈希冲突。并且随哈希表中节点(键值对)增加时,能够进行扩容和链表转红黑树操作。扩容是为了增加槽位,以容纳更多的节点,策略是每次扩容二倍。而链表转红黑树是发生在每个槽位上(满足一定条件时),在链表中顺序添加、查找和删除某个元素的效率很低(n),而红黑树中相应的操作效率要高(lgn)。 HashMap中的几个静态字段: sta原创 2018-01-25 19:58:25 · 650 阅读 · 0 评论 -
Java集合之LinkedHashMap实现LRU缓存
LinkedHashMap在HashMap的基础上,又将所有节点通过双向链表组织在一起,默认按照节点插入顺序构建链表 当设置accessOrder为true时,则每访问一个节点,要将此节点在链表中移动到尾部,根据此特性能够通过 LinkedHashMap实现LRU缓存。 HashMap中有三个空方法,LinkedHashMap继承了HashMap,并利用这三个方法实现组织链表原创 2018-01-25 20:51:47 · 753 阅读 · 0 评论 -
Java集合基础知识
常用的Java集合类包括List、Set、Queue、Map等。其中List、Set、Queue三个接口都继承了Collection接口,而Collection接口又继承了Iteratable接口。Java集合中只能保存对象,不能保存基本类型。泛型在集合中发挥了至关重要的作用,用来指定一个集合中元素的类型。 Collection: Collection接口提供了集合类的一些公原创 2018-01-24 19:26:45 · 252 阅读 · 0 评论 -
ConcurrentHashMap扩容操作链表重分配
ConcurrentHashMap中和HashMap一样,当容量不足时,需要进行扩容操作。由于ConcurrentHashMap需要支持并发下的扩容操作,因此要比HashMap复杂很多。下面是对扩容操作时,原table某处i位置上的链表从新分配到新table位置i和n+i部分的分析。 Node ln, hn; if (fh >= 0) { // fh的第n位若为0,保持原位置fh & (原创 2018-02-02 10:51:54 · 1096 阅读 · 0 评论