
Java集合
Jaymeng8848
攀爬每一个巨人,站在他们肩膀上看一看
展开
-
LinkedList
日常开发中,保存一组数据使用的最多的就是 ArrayList, 其次就是 LinkedList 了。我们知道 ArrayList 是以数组实现的,遍历时很快,但是插入、删除时都需要移动后面的元素,效率略差些。而LinkedList 是以链表实现的,插入、删除时只需要改变前后两个节点指针指向即可,省事不少。今天来看下 LinkedList 源码。LinkedList 继承结构LinkedList 继承自 AbstractSequentialList 接口,同时了还实现了 Deque, Queue转载 2020-09-01 09:44:36 · 123 阅读 · 0 评论 -
Deque 双端队列
什么是 DequeDeque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋壳。Deque 继承自 Queue,直接实现了它的有 LinkedList, ArayDeque, ConcurrentLinkedDeque 等。Deque 支持容量受限的双端队列,也支持大小不固定的。一般双端队列大小不确定。Deque 接口定义了一些从头部和尾部访问元素的方法。比如分别在头部、尾部进行插入、删除、获取元素。和 Queue类似,每个操作都有两种方法,一种在异常转载 2020-09-01 09:32:16 · 254 阅读 · 0 评论 -
Iterator
Java 提供的 集合类都在 Java.utils 包下,其中包含了很多 List, Set, Map, Queue… 它们的关系如下面这张类图所示:这里写图片描述可以看到,Java 集合主要分为两类:Collection 和 Map. 而 Collection 又继承了 Iterable< E > 接口,Iterable 接口内只有一个 iterator 方法,返回一个 Iterator 迭代器:public interface Iterable {/*** Returns an转载 2020-09-01 09:07:04 · 148 阅读 · 0 评论 -
Set集合
看过源码都知道HashSet底层就是HashMap,而Set也就是集合最大的特点不会存储重复的元素,那么他到底是如何实现的呢,其实它就是将存入的值存到HashMap的Key中,value为所有字段都相同的的一个名为PRESENT的object对象,存入时候会通过key映射到数组中,这就相当于key对应的是Hash映射过后的数组索引,数组索引当然没有重复的了。LinkedHashSet很明显,和LinkedHashMap一样,就不用赘述了,不了解的可以看我之前的博客而TreeMap则是,SortedSe原创 2020-07-25 13:18:12 · 80 阅读 · 0 评论 -
LinkedHashMap
LinkedListHashMap虽然是基于JDK1.6但是讲的非常好。原创 2020-07-22 16:38:09 · 111 阅读 · 0 评论 -
TreeMap源码阅读总结
TreeMap底层的数据结构就是一颗红黑树。TreeMap是一个有序的key-value集合,因为他的底层数据结构通过红黑树实现的。值得一提的是,当HashMap的一条链表长度大于8时,会自动转为红黑树,这时候哈希映射到那个索引下的元素也是有序排列的。初始化推迟到put添加元素时。 Entry<K,V> t = root; if (t == null) { compare(key, key); // type (and possibly n原创 2020-07-22 15:22:40 · 118 阅读 · 0 评论 -
fail-fast解析
引入在前面介绍ArrayList的扩容问题时对于modCount的操作没有详细说明,该变量的操作在add,remove等操作中都会发生改变。那么该变量到底有什么作用呢?简介fail-fast 机制,即快速失败机制,是java集合(Collection)中的一种错误检测机制。当在迭代集合的过程中该集合在结构上发生改变的时候,就有可能会发生fail-fast,即抛出ConcurrentModificationException异常。fail-fast机制并不保证在不同步的修改下一定会抛出异常,它只是尽最.转载 2020-07-22 15:11:38 · 168 阅读 · 0 评论 -
HashTable源码阅读总结
索引值计算区别:HashMap:(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);(n - 1) & hash])HashTable:key.hashCode();(hash & 0x7FFFFFFF) % tab.length简单来说:HashMap重新定义了自己的哈希值的计算,并且将原本对于数组长度取模的操作改成了位运算在同样效果下提高了效率。而HashTable并不这样。详细的说:对于任原创 2020-07-22 14:45:52 · 189 阅读 · 0 评论 -
Iterator、Iterable接口的使用
最近手写动态组为了更接近Arraylist想要实现foreach结构学习了一下Iterator、Iterable接口的使用,已此分享和忘记时观看for-each循环可以与任何实现了Iterable接口的对象一起工作。 而java.util.Collection接口继承java.lang.Iterable,故标准类库中的任何集合都可以使用for-each循环。为什么一定要去实现Iterable这个接口呢? 为什么不直接实现Iterator接口呢?看一下JDK中的集合类,比如List一族或者S原创 2020-07-07 15:04:16 · 268 阅读 · 0 评论 -
modCount作用
我们能够发现,在集合类的源码里,像HashMap、TreeMap、ArrayList、LinkedList等都有modCount属性,字面意思就是修改次数,首先看一下源码里对此属性的注释HashMap部分源码: /** * The number of times this HashMap has been structurally modified * Structural modifications are those that change the number of ma转载 2020-07-21 12:05:42 · 2012 阅读 · 3 评论