Java集合
文章平均质量分 93
介绍Java集合
爱吃牛肉的大老虎
学无止境,既要有深度又要有广度地学习
展开
-
Java集合之Disruptor 介绍
Disruptor是一个开源的高性能内存队列,由英国外汇交易公司 LMAX 开发的,获得了 2011 年的 Oracle 官方的 Duke’s Choice Awards(Duke 选择大奖)。Disruptor提供的功能类似于KafkaRocketMQ这类分布式队列,不过,其作为范围是JVM(内存),Disruptor解决了JDK内置线程安全队列的性能和内存安全问题,Disruptor有个最大的优点就是快Disruptor被设计用于在生产者消费者,简称PCP。原创 2023-07-04 11:44:59 · 1053 阅读 · 0 评论 -
Java位集合之BitMap,BitSet和布隆过滤器 解析
Bit-map的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。节省存储空间Bitmap主要用于快速检索关键字状态,通常要求关键字是一个连续的序列(或者关键字是一个连续序列中的大部分), 最基本的情况,使用1bit表示一个关键字的状态(可标示两种状态),根据需要也可以使用2bit(表示4种状态),3bit(表示8种状态)。Bitmap。原创 2023-03-05 20:05:09 · 2600 阅读 · 0 评论 -
HashMap之删除报错ConcurrentModificationException
集合由映射支持,如果在对集合进行迭代时修改了映射(通过迭代器自己的移除操作除外),则迭代的结果是未定义的。是表示期望的修改次数,在迭代器构造的时候这两个值是相等,如果在遍历过程中这两个值出现了不同步就会抛出。操作,如果这个操作时替换操作如上例中将第一个元素进行修改,就没有抛出异常,但是如果是使用。添加元素的操作,则肯定会抛出异常了。这里实际还是直接对集合进行的操作,而不是通过迭代器进行操作。代码编译成的字节码,从中揣测它到底是怎么实现的了。语法的一个增强,那么它的底层到底是怎么实现的呢?原创 2023-02-06 10:18:03 · 640 阅读 · 0 评论 -
List集合之元素和对象去重
文章目录1 使用的实体类2 利用Collectors.toMap去重2.1 toMap去重说明2.2 Funcion.identity()解释3 利用Collectors.toCollection和TreeSet去重1 使用的实体类@Data@NoArgsConstructor@AllArgsConstructor@Stringpublic class User(){ private String userId; private String userName; private Integ原创 2019-12-24 16:07:52 · 13379 阅读 · 4 评论 -
java.util.Properties类操作properties文件
文章目录1 Properties类1.1 认识properties文件1.2 了解Properties类1.3 properties文件与Properties类的关系1.4 使用Properties类1.4.1 操作properties1.4.2 操作XML文件1.4.3 java读取properties文件的九种方法1 Properties类由于java.util.Properties类也是属于继承Map的,所以就归类到集合这章了1.1 认识properties文件了解并认识properties文原创 2022-03-10 16:05:52 · 1452 阅读 · 0 评论 -
非阻塞队列ConcurrentLinkedQueue和阻塞队列的深入讲解
文章目录1 ConcurrentLinkedQueue1.1 引言1.2 ConcurrentLinkedQueue的介绍1.3 ConcurrentLinkedQueue的结构1.4 入队列1.5 出队列2 阻塞队列2.1 什么是阻塞队列2.2 Java里的阻塞队列2.2.1 ArrayBlockingQueue2.2.2 LinkedBlockingQueue2.2.3 PriorityBlockingQueue2.2.4 DelayQueue2.2.5 SynchronousQueue2.2.6 L原创 2021-12-25 20:44:09 · 548 阅读 · 0 评论 -
Queue之ArrayDeque源码解析
文章目录1 Queue1.1 定义1.2 底层存储1.3 构造方法1.4 入队(添加元素到队尾)1.5 出队(移除并返回队头元素)1.6 返回队头元素(不删除)1 Queue1.1 定义前面讲了Stack是一种先进后出的数据结构:栈,那么对应的Queue是一种先进先出(First In First Out)的数据结构:队列对比一下Stack,Queue是一种先进先出的容器,它有两个口,从一个口放入元素,从另一个口获取元素。如果把栈比作一个木桶,那么队列就是一个管道。队列有两个口,一个负责入队另一原创 2021-11-14 12:57:01 · 182 阅读 · 0 评论 -
Stack&Vector源码解析
文章目录1 Stack源码1.1 栈定义1.2 Stack&Vector底层存储1.3 peek()——获取栈顶的对象1.4 pop()——弹栈(出栈)1.5.push(E item)——压栈(入栈)1.6 search(Object o)1.7 empty()——容器是否为空1.8 stack是否可以用链表1 Stack源码前面我们已经接触过几种数据结构了,有数组、链表、Hash表、红黑树(二叉查询树),今天再来看另外一种数据结构:栈1.1 栈定义什么是栈,直接举个例子,栈就相当于一个很窄原创 2021-11-14 09:43:21 · 390 阅读 · 0 评论 -
集合容器中Strategy设计模式之Comparable&Comparator接口
文章目录1 集合容器中Strategy设计模式1.1 排序1.2 排序的方法论1.2.1 comparable1.2.2 comparator1.3 Strategy设计模式1.4 回忆TreeMap的比较大小1 集合容器中Strategy设计模式前面我们说TreeMap和TreeSet都是有顺序的集合,而顺序的维持是要靠一个比较器Comparator或者map的key实现Comparable接口既然说到排序,首先我们不用去关心什么是Strategy设计模式,也不用关心它为了解决什么问题而存在,我们直转载 2021-11-13 22:25:44 · 158 阅读 · 0 评论 -
TreeSet&NavigableMap&NavigableSet源码解析
文章目录1 TreeSet1.1 定义1.2 底层存储和构造方法1.3 TreeSet的增加和删除1.4 是否包含1.5 容量检查1.6 NavigableSet&NavigableMap1 TreeSetTreeSet是一个有序的Set集合。既然是有序,那么它是靠什么来维持顺序的呢,TreeMap中是通过一个比较器Comparator比较大小,因此TreeSet要实现比较也必须依靠于Comparator接口。Map和Set有很大渊源关系,比如Map有HashMap,LinkedHashMa转载 2021-11-13 21:24:53 · 210 阅读 · 0 评论 -
TreeMap源码解析
文章目录1 TreeMap1.1 二叉查询树、红黑树1.2 TreeMap的底层实现1 TreeMapTreeMap是基于红黑树结构实现的一种Map,要分析TreeMap的实现首先就要对红黑树有所了解。要了解什么是红黑树,就要了解它的存在主要是为了解决什么问题,对比其他数据结构比如数组,链表,Hash表等树这种结构又有什么优点。1.1 二叉查询树、红黑树简单总结一下数组,链表,Hash表以及树的优缺点:数组优点:(1)随机访问效率高(根据下标查询),(2)搜索效率较高(可使用折半方法)转载 2021-11-13 19:00:04 · 476 阅读 · 0 评论 -
HashSet源码解析&Map迭代器
文章目录1 HashSet源码解析1.1 定义1.2 底层存储1.3 构造方法1.4 增加和删除1.5 是否包含1.6 容量检查2 迭代器2.1 HashMap的迭代器2.2 LinkedHashMap的迭代器1 HashSet源码解析HashSet也是一种java容器,这里不再赘述hash的概念原理等一大堆东西了,需要在啰嗦一句的是hash表是基于快速存取的角度设计的,也是一种典型的空间换时间的做法先来看下Set的特点:Set元素无顺序,且元素不可以重复无顺序,由于散列的缘故;不可重复,HashM转载 2021-11-12 16:38:49 · 222 阅读 · 0 评论 -
LinkedHashMap源码解析(jdk1.7之前)
文章目录1 LinkedHashMap(jdk1.7之前)1.1 定义1.2 底层存储1.3 构造方法1.4 增加1.5 删除1.6 查找1.7 是否包含1.8 cache功能1 LinkedHashMap(jdk1.7之前)我们知道Map其底层数据存储是一个hash表(数组+单向链表)。接下来我们看一下另一个LinkedHashMap,它是HashMap的一个子类,他在HashMap的基础上维持了一个双向链表(hash表+双向链表),在遍历的时候可以使用插入顺序(先进先出,类似于FIFO),或者是最近转载 2021-11-12 12:38:05 · 152 阅读 · 0 评论 -
HashMap源码解析(jdk7之前)
文章目录1 HashMap源码1.1 自己实现一个Map1.2 HashMap的定义1.3 底层存储1 HashMap源码前面了解了jdk容器中的两种List,回忆一下怎么从list中取值(也就是做查询),是通过index索引位置对不对,由于存入list的元素时安装插入顺序存储的,所以index索引也就是插入的次序。Map是这样一种容器,它可以存储两个元素键和值,根据键这个关键字可以明确且唯一的查出一个值,这个过程很像查字典,考虑一下使用什么样的数据结构才能实现这种效果呢?1.1 自己实现一个Map转载 2021-11-12 10:37:26 · 113 阅读 · 0 评论 -
容器中的Iterator设计模式
文章目录1 Iterator设计模式1.1统一接口1.2 Iterator设计思想1.3 自己实现容器的`Iterator`遍历1.4 ArrayList的Iterator实现1.5 LinkedList的Iterator实现1 Iterator设计模式由于ArrayList和LinkedList这两种list是我们工作中最常用到的List容器。当然数组和链表也是两种常见的基本数据结构,其他基本数据结构还有堆栈、队列、树等,对java容器的学习,也可以看做是对数据结构的学习和使用。在ArrayList转载 2021-11-11 11:57:28 · 166 阅读 · 0 评论 -
LinkedList源码详解
文章目录1 LinkedList源码1.1 链表的概念1.1.1 单向链表1.1.2 单向循环链表1.1.3 双向链表1.1.4 双向循环链表1.2 定义1.2.1 类的属性1.2.2 Node 的静态内部类1.2.3 构造函数1.2.4 查找 - get1.2.5 添加add1.2.6 修改1.2.7 删除1 LinkedList源码LinkedList是基于链表结构的一种List,在分析LinkedList源码前有必要对链表结构进行说明。1.1 链表的概念链表是由一系列非连续的节点组成的存储结构转载 2021-11-11 11:22:35 · 180 阅读 · 0 评论 -
ArrayList源码详解
文章目录1 ArrayList源码1.1 ArrayList定义1.2 底层存储1.3 构造方法1.4 增加1.5 删除1.6 更新1.7 查找1.8 是否包含1.9 容量判断1 ArrayList源码工作中经常听到别人讲容器,各种各样的容器,话说到底什么是容器,通俗的讲容器就是用来装东西的器皿,比如:水桶就是用来盛水的,水桶就是一个容器在我们写程序的时候常常要对大量的对象进行管理,比如查询,遍历,修改等。jdk为我们提供的容器位于java.util包,也是我们平时用的最多的包之一。但是为什么不用数转载 2021-11-10 16:51:22 · 360 阅读 · 0 评论 -
Java遍历ArrayList,Map和Set四种方法对比
文章目录1.1 List1.1.1 遍历ArrayList1.1.2 数组与List之间相互转换的方法详解1.2 遍历Map1.2.1 四种遍历Map方法1.2.2 分析四种方法性能1.3 Set1.3.1 HashSet1.3.1 TreeSet1.1 List1.1.1 遍历ArrayListpackage com.test;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public c原创 2021-11-10 15:57:23 · 294 阅读 · 0 评论 -
以HashMap和HashSet源码分析其Hash算法(jdk7之前源码分析)
文章目录1 分析Hash存储机制1.1 概述1.2 HashMap的存储实现1.3 Hash算法的性能选项1.4 HashMap 的读取实现1.5 HashSet 的实现1.6 HashMap的put与HashSet的add声明:以下文章是以jdk7之前源码分析,而非现在jdk8源码分析,学习过去源码可以方便打牢源码基础1 分析Hash存储机制1.1 概述HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash算法决定集合元素的存储位置,这样可以保证能快原创 2021-11-09 15:20:16 · 167 阅读 · 0 评论 -
HashMap原理,碰撞,ConcurrentHashMap
文章目录1 HashMap1.1 哈希算法1.2 对比:Hashtable、HashMap、TreeMap1.2.1 Hashtable1.2.2 HashMap1.2.3 TreeMap1.3 HashMap概念和底层结构1.3.1 概念1.3.2 原理1.3.2.1 加载因子设置0.75,初始化临界值121.3.2.2 哈希表底层怎么计算hash值1.3.2.3 put1.3.2.4 一般用什么作为HashMap的key1.3.2.5 get1.3.2.6 如何重新调整HashMap大小1.4 哈希碰撞原创 2020-06-19 23:41:21 · 1512 阅读 · 1 评论