集合类
文章平均质量分 62
拧螺丝的工具人
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【集合类】HashMap几个常见问题
hashMap的底层存储结构是?在1.7是由数组+链表组成,1.8是数组+链表+红黑数为什么要进行树化?链表取元素要从头遍历到对应的节点,时间复杂度是O(n),而红黑树基于二叉树时间复杂度是O(logN),从而提高搜索效率。但是红黑树节点的大小约是普通节点的两倍,只有包含足够节点时进行转化才比较合适,这是出于空间与时间平衡的考虑为什么树化阈值是8?如果hashCode分布离散足够好的话,一般很少会进行树化,在理想情况下,链表长度符合泊松分布,各长度的命中概率递减,而8是的概率就已经足够小了为什么原创 2021-05-31 16:43:39 · 266 阅读 · 0 评论 -
【集合类】源码解析之HashMap类
大纲HashMap类声明主要字段构造函数tableSizeFor新增方法put方法hash方法putVal方法扩容方法resize方法查询方法get方法getNode方法删除方法remove方法removeNode方法替换方法replace方法HashMap数组+链表+红黑树,线程不安全,允许null键null值类声明public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cl原创 2020-06-28 16:30:41 · 134 阅读 · 0 评论 -
【集合类】源码解析之 Map接口
Map接口双列集合,键值对(确保键的唯一)构造函数public interface Map<K,V>内部接口 Entry抽象了内部存储的节点,对应一个键值对interface Entry<K,V> { // 返回此项的Key K getKey(); // 返回此项的value V getValue(); // 设置此项的value V setValue(V value); /** * 两个entry比较相等性原创 2020-06-28 16:18:01 · 155 阅读 · 0 评论 -
【集合类】源码解析之 HashSet类、LinkedHashSet类
大纲HashSetLinkedHashSetHashSet哈希表结构(其实用的是Map),线程不安全,不保证顺序,自动去重(必须覆盖hashCode和equals方法)类声明public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable当哈希算法算出两个值相同时,称之为哈希冲突。当发生哈希冲突时需要用equals对内容进行判断。原创 2020-06-24 10:04:46 · 134 阅读 · 0 评论 -
【集合类】源码解析之 Set接口、AbstractSet抽象类
大纲Set接口AbstractSet抽象类HashSetSet接口不包含重复元素的集合。 更正式地说,集合不包含一对元素e1和e2 ,使得e1.equals(e2) ,并且最多一个空元素类声明public interface Set<E> extends Collection<E>和Collection接口的方法一致,通过 equal() 和 hashCode() 排重AbstractSet抽象类类声明public abstract class AbstractS原创 2020-06-24 09:57:15 · 245 阅读 · 0 评论 -
【集合类】源码解析之 Vector、Stack类
大纲VectorStackVector基于数组,线程同步,慢类声明public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.SerializableVector的方法和ArrayList基本相同,但是在方法上都加了 synchronized 关键字,作为线程同步的集合。已经不推荐使用,如果有相关的同步需求可以使用 Col原创 2020-06-24 09:53:13 · 130 阅读 · 0 评论 -
【集合类】源码解析之 AbstractSequentialList 抽象类、LinkedList类
大纲AbstractSequentialList 抽象类LinkedListList方法Deque方法工具方法序列化其余方法AbstractSequentialList 抽象类顺序列表,相对于RandomAccess标记接口而言,继承了RandomAccess接口表示其容器支持随机访问,这类容器优先使用索引进行操作,而对于不支持随机访问的容器通常使用迭代器进行操作public abstract class AbstractSequentialList<E> extends Abstract原创 2020-06-15 11:22:50 · 158 阅读 · 0 评论 -
【集合类】源码解析之 Queue接口、AbstractQueue抽象类、Deque接口
大纲Queue接口AbstractQueue抽象类Deque接口Queue接口队列,除了基本的Collection操作之外,队列还提供额外的插入,提取和检查操作。 这些方法中的每一种都有两种形式:如果操作失败,则抛出一个异常,另一种形式返回一个特殊值( null或false ,具体取决于操作)。通常(但不一定)是以FIFO(先进先出)方式排序元素例外情况包括优先级队列(根据提供的比较器对元素进行排序)和LIFO队列(或堆栈)(后进先出)类声明public interface Queue<E原创 2020-06-15 11:16:12 · 201 阅读 · 0 评论 -
【集合类】源码解析之 ArrayList类
大纲ArrayList重点字段构造函数扩容存储删除序列化和反序列化jdk1.8新增的方法实现其余方法ArrayList基于数组,线程不安全,随机存取,查询快增删慢,以1.5倍扩容,最大是Integer.MAX - 8public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{重点字段// 默原创 2020-06-10 16:31:17 · 236 阅读 · 0 评论 -
【集合类】源码解析之 List接口、AbstractList抽象类
大纲List接口AbstractList抽象类内部类 Itr内部类 ListItrSubListRandomAccessSubListList接口存取顺序一致,有索引,允许重复类声明public interface List<E> extends Collection<E> 特有方法:所有通过索引操作的方法都要注意其索引的范围,否则容易导致发生 IndexOutOfBoundsExceptionvoid add(int index, E element); // 向指原创 2020-06-10 09:48:35 · 440 阅读 · 0 评论 -
【集合类】源码解析之 Iterable接口、Collection接口、AbstractCollection抽象类
大纲集合Iterable接口Collection接口AbstractCollection抽象类集合常用集合类框架图Iterable接口Iterable 代表接口具备迭代能力,实现此接口允许对象成为“ for-each循环”语句的目标public interface Iterable<T> { // 真正的迭代器 Iterator<T> iterator(); // foreach方法 jdk1.8新增 default void forEa原创 2020-06-10 09:34:25 · 362 阅读 · 0 评论
分享