java集合源码分析
文章平均质量分 84
努力的小璠
一起努力,一起冲冲冲
展开
-
modCount的作用
在集合类的源码里,像HashMap、TreeMap、ArrayList、LinkedList等都有modCount属性,字面意思就是修改次数,首先看一下源码里对此属性的注释HashMap部分源码:TreeMap部分源码:AbstractList部分源码:无论哪个源码的解释,意思都是modCount记录着结构修改次数,对于AbstractList而言。modCount字段由iterator和 listIterator方法返回的迭代器和List迭代器实现使用。如果此字段的值意外更改,迭代器(或原创 2022-07-13 19:45:56 · 263 阅读 · 0 评论 -
Java 集合源码学习(六):AbstractList
AbstractList 继承自AbstractCollection 抽象类,实现了List 接口 ,是 ArrayList 和 AbstractSequentiaList 的父类。它实现了 List 的一些位置相关操作(比如 get,set,add,remove),是第一个实现随机访问方法的集合类,但不支持添加和替换。在 AbstractCollection 抽象类 中我们知道,AbstractCollection 要求子类必须实现两个方法: iterator() 和 size()。 AbstractLi原创 2022-07-12 11:28:24 · 264 阅读 · 1 评论 -
Java 集合源码学习(五):AbstractCollection
子类必须以自己的方式实现这两个方法。除此外,AbstractCollection 中默认不支持添加单个元素,如果直接调用 方法,会报错:因此,如果子类是可添加的数据结构,需要自己实现 方法。1.addAll() 添加一个集合内的全部元素:2.clear() 删除所有元素:3.contains() 是否包含某个元素:4.containsAll() 是否包含指定集合中的全部元素:5.isEmpty() 是否为空:6.remove() 删除某个元素:7.removeA原创 2022-07-11 19:16:51 · 336 阅读 · 0 评论 -
java集合源码学习(七)ArrayList
调用有参构造方法时,如果给定初始容量为0,或者传入集合为空集合(不是null),那么,将空数组EMPTY_ELEMENTDATA赋给elementData,此时在添加第一位元素时,不会扩容为10。当调用无参构造方法时,elementData数组会被赋于DEFAULTCAPACITY_EMPTY_ELEMENTDATA,且在添加第一位元素时,elementData数组的容量被扩容为10。否则新建一个newType类型的数组。将列表中指定位置的元素替换为指定的元素。在原来的集合的末尾,添加一个集合。...原创 2022-07-26 21:19:20 · 357 阅读 · 0 评论 -
java集合源码学习(四)List
一个 List 是一个元素有序的、可以重复、可以为 null 的集合(有时候我们也叫它“序列”)。Java 集合框架中最常使用的几种 List 实现类是 ArrayList,LinkedList 和 Vector。在各种 List 中,最好的做法是以 ArrayList 作为默认选择。 当插入、删除频繁时,使用 LinkedList,Vector 总是比 ArrayList 慢,所以要尽量避免使用它们可以看到,List 接口的实现类在实现插入元素时,都会根据索引进行排列。 比如 ArrayLis原创 2022-07-08 15:47:03 · 113 阅读 · 0 评论 -
java集合源码学习(三)Collection
2.使用 迭代器 3.使用 聚合操作原创 2022-07-07 18:50:32 · 561 阅读 · 0 评论 -
java集合源码学习(二)ListIterator
注意,迭代器 没有当前所在元素一说,它只有一个游标( cursor )的概念,这个游标总是在元素之间初始时它在第 0 个元素之前,调用 next() 游标后移一位: 长度为的列表的迭代器具有可能的光标位置区别在于第二种可以指定 游标的所在位置。......原创 2022-07-07 11:38:18 · 265 阅读 · 0 评论 -
Consumer接口解析
java.util.function.Consumer 接口则正好与Supplier接口相反,它不是生产一个数据,而是消费一个数据, 其数据类型由泛型决定。1、抽象方法:acceptConsumer 接口中包含抽象方法 void accept(T t) ,意为消费一个指定泛型的数据。调用Consumer接口,就必须要实现accept方法。实现方式大致有两种:方式一: 通过Lambda表达式传进来的方法(传进来的方法默认实现accept,而不是andThen,虽然andThen也可以重写)原创 2022-07-06 15:57:42 · 1223 阅读 · 0 评论 -
java集合源码学习(一)Iterator、Iterable
在学习集合源码之前,我们应对集合家族有一个清晰的理解。hasnext():判断集合是否有下一个元素返回布尔值next():获取迭代的下一个元素remove() : 从迭代器指定的集合中移除迭代器返回的最后一个元素。forEachRemaining(Consumer......原创 2022-07-05 20:06:43 · 255 阅读 · 0 评论