集合
文章平均质量分 80
java集合:ArrayList、Vector、LinkedList、HashSet、LinkedSet、TreeSet、HashMap、TreeMap、HashTable
CodingAnHour
明日复明日,明日何其多。我生待明日,万事成蹉跎。
展开
-
Java1.8+ JUC包的ConcurrentSkipListMap
跳跃表是基于链表扩展实现的一种特殊链表,类似于树的实现,跳跃表不仅实现了横向链表,还实现了垂直方向的分层索引。一个跳跃表由若干层链表组成,每一层都实现了一个有序链表索引,只有最底层包含了所有数据,每一层由下往上依次通过一个指针指向上层相同值的元素,每层数据依次减少,等到了最顶层就只会保留部分数据了。跳跃表的这种结构,是利用了空间换时间的方法来提高了查询效率。程序总是从最顶层开始查询访问,通过判断元素值来缩小查询范围。如图。原创 2022-09-17 12:52:37 · 149 阅读 · 0 评论 -
Java1.8+ JUC包的ConcurrentHashMap源码分析
concurrentHashMap是一个支持高并发更新与查询的哈希表(基于HashMap)。在保证安全的前提下,进行检索不需要锁定。与hashtable不同,该类采用为什么get方法不需要加锁,可以保证线程安全的?因为 Node 的元素 val 和指针 next 是用 volatile修饰保证可见性和有效性,在多线程环境下synchronization+CAS的的方式保证线程操作的安全,同时synchronization锁的颗粒度更小,hashtable是方法级而synchronization是对象级别。原创 2022-09-16 16:45:05 · 848 阅读 · 0 评论 -
Java集合Set之源码HashSet、LinkedHashSet
HashSet 底层是HashMap添加一个元素时,先得到hash值会转成->索引值找到存储数据表table,看这个索引位置是否已经存放的有元素如果没有,直接加入如果有,调用 equals 比较,如果相同,就放弃添加,如果不相同,则添加到最后判断当前key与p节点的值是否相等,相等则是同一个值(注意,equals方法每个类都可以重写,具体判断各不相同)在Java8中,如果一条链表的元素个数到达 TREEIFY_THRESHOLD(默认 是8),并且table的大小>= MIN.原创 2021-12-18 09:30:43 · 575 阅读 · 0 评论 -
Java集合List之源码LinkedList
LinkedList的特点LinkedList是通过双向链表去实现的。从LinkedList的实现方式中可以看出,它不存在容量不足的问题,因为是链表。LinkedList实现java.io.Serializable的方式。当写入到输出流时,先写入“容量”,再依次写出“每一个元素”;当读出输入流时,先读取“容量”,再依次读取“每一个元素”。LinkdedList的克隆函数,即是将全部元素克隆到一个新的LinkedList中。由于LinkedList实现了Deque,而Deque接口定义了在双端队列原创 2021-07-24 16:57:23 · 181 阅读 · 0 评论 -
Java集合List之源码Vector
Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:Vector 是同步访问的。Vector中的操作是线程安全的默认2倍扩容,可自定义,如下图所示源码流程图public static void main(String[] args) { List list = new Vector<>(); List list1 = new Vector<>(10,10); list.add(1); list.remov原创 2021-07-22 00:49:37 · 221 阅读 · 0 评论 -
Java集合List之ArrayList源码
ArrayList特点可以存储nullArrayList是由数组实现数据存储的ArrayList与Vector基本相同但是ArrarList不是线程安全的,执行效率高,vector是线程安全的源码debuger 测试示例public static void main(String[] args) { List list = new ArrayList<>(); for (int i = 0; i < 10; i++) { // 循环添加10原创 2021-07-20 00:40:14 · 177 阅读 · 0 评论