![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
集合类
文章平均质量分 74
集合类
yygr
这个作者很懒,什么都没留下…
展开
-
Java容器类详解 ArrayDeque详解
ArrayDeque是JDK容器中的一个双端队列实现,内部使用数组进行元素存储,不允许存储null值,可以高效的进行元素查找和尾部插入取出,是用作队列、双端队列、栈的绝佳选择,性能比LinkedList还要好。听到这里,不熟悉ArrayDeque的你是不是有点尴尬?JDK中竟然还有这么好的一个容器类?别慌,现在了解还来得及,趁响指还没有弹下去,快上车吧,没时间解释了。来看一个ArrayDeque的使用小栗子:// 初始化容量为4//添加元素// 获取元素。转载 2024-04-18 14:02:11 · 683 阅读 · 0 评论 -
Java使用stream流实现数组和集合之间的相互转换
【代码】Java使用stream流实现数组和集合之间的相互转换。转载 2024-03-16 11:17:21 · 91 阅读 · 0 评论 -
对集合数组操作的神器:Stream流
https://blog.csdn.net/weixin_52394141/article/details/127327056转载 2024-03-16 11:11:07 · 68 阅读 · 0 评论 -
使用stream流操作数组方法整理
方法设置一个默认值(这里设置为0),以防止找不到最大值时出现空指针异常。(这里设置为0),以防止找不到最大值时出现空指针异常。方法将二维数组转换成一维流。转载 2024-03-16 11:03:00 · 305 阅读 · 0 评论 -
Java中的forEach没有下标?那就自己实现
给大家推荐一个超实用的方法 -- String.join();转载 2024-03-16 10:29:38 · 197 阅读 · 0 评论 -
JDK 1.8新特性(foreach、Stream、lamdba)
加工:map() 作用是修改迭代中的每个元素,功能有点像foreach,只是侧重点不同,map()侧重修改,foreach侧重遍历。转换:collect(Collectors.toList());过滤一个list,获取到所有的activityId不为空的去重Set。限流:limit(),比如取集合中 age>30的前2个员工信息。去重:distinct() 去重(基本类型数据的去重)遍历:foreach() 这个和list的用起来一样。转换:stream() 把一个list转换成流。转载 2024-03-16 10:27:15 · 185 阅读 · 0 评论 -
哈希表详解
哈希表:即散列存储结构。散列法存储的基本思想:建立记录关键码字与其存储位置的对应关系,或者说,由关键码的值决定数据的存储地址。这样,不经过比较,一次存取就能得到所查元素的查找方法优点:查找速度极快(O(1)),查找效率与元素个数n无关!哈希方法(杂凑法)选取某个函数,依该函数按关键字计算元素的存储位置并按此存放;查找时也由同一个函数对给定值k计算地址,将k与地址中内容进行比较,确定查找是否成功。哈希函数(杂凑函数)...转载 2022-08-16 12:36:50 · 17625 阅读 · 0 评论 -
WeakHashMap解析
Map 的子类常见的有HashMap、Hashtable、、等。WeakHashMap,直译就是:虚弱的 HashMap。从名字可得知其和 HashMap 有关,确实如此,WeakHashMap 功能几乎和 HashMap 一致。Weak,联想java.lang.ref包下的弱引用(WeakReference),由此这里面还牵扯到了一种弱引用结构。...转载 2022-08-13 16:29:29 · 195 阅读 · 0 评论 -
Java 数组转 List 的 4 种方式
https://blog.csdn.net/qidasheng2012/article/details/115112452前言【一】最常见方式(未必最佳)【二】数组转为List后,支持增删改查的方式【三】通过集合工具类Collections.addAll()方法(最高效)【四】Java8可通过stream流 【推荐】问题解答总结本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。通过 方式,将数组转换List后,不能对List增删,只能查改,否则转载 2022-07-01 16:14:18 · 4913 阅读 · 0 评论 -
int数组转化成List简便的方法(互转)
http://t.zoukankan.com/shouyaya-p-13311364.html转载 2022-07-01 16:11:19 · 3225 阅读 · 4 评论 -
TreeMap各种排序方式
https://www.jb51.net/article/90537.htmMap是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。•TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。•HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的H转载 2022-06-29 12:02:44 · 3296 阅读 · 0 评论 -
如何对map进行排序
https://wenku.baidu.com/view/103ff6733f1ec5da50e2524de518964bcf84d20a.html转载 2022-06-23 15:29:15 · 2561 阅读 · 0 评论 -
java学习笔记(treeset的部分原理)
https://blog.csdn.net/weixin_62697030/article/details/1230378431.先说说最底层的原理,两种比较器 关于treeset(使用内部比较器) treeset(外部比较器) 当然这个外部比较器还有别的写法]最常见的就是匿名内部类的写法...转载 2022-06-22 20:18:24 · 102 阅读 · 0 评论 -
ConcurrentHashMap 能否保证绝对的线程安全?
https://blog.csdn.net/singwhatiwanna/article/details/104586114/ConcurrentHashMap 是 Java 并发包中提供的一个线程安全且高效的 HashMap 实现,以弥补 HashMap 不适合在并发环境中操作使用的不足,本文就来分析下 ConcurrentHashMap 的实现原理,并对其实现原理进行分析!在之前的集合文章中,我们了解到 HashMap 在多线程环境下操作可能会导致程序死循环的线上故障!既然在多线程环境下不能使用 Has转载 2022-06-09 15:25:27 · 2429 阅读 · 0 评论 -
java集合遍历的几种方式总结及比较
https://www.cnblogs.com/huangjinyong/p/10689208.html集合类的通用遍历方式, 用迭代器迭代:Iterator it = list.iterator();while(it.hasNext()) { Object obj = it.next();}Map遍历方式:1、通过获取所有的key按照key来遍历//Set<Integer> set = map.keySet(); //得到所有key的集合for转载 2022-05-07 08:23:02 · 2006 阅读 · 0 评论 -
Java BitSet的理解与使用
https://blog.csdn.net/drdongshiye/article/details/90740695一,概括BitSet是位操作的对象,值只有0或1即false和true,内部维护了一个long数组,初始只有一个long,所以BitSet最小的size是64,当随着存储的元素越来越多,BitSet内部会动态扩充,一次扩充64位,最终内部是由N个long来存储。 默认情况下,BitSet的所有位都是false即0。 在没有外部同步的情况下,多个线程操作一个BitSet是不安全的。转载 2022-04-14 08:12:18 · 1344 阅读 · 0 评论 -
ConcurrentHashMap - 常用的get与put方法
https://blog.csdn.net/ZOKEKAI/article/details/90741157简介说明 在日常使用中,ConcurrentHashMap被使用频率最高的应该就是 get 和 put 方法了,本章我们将要来详细解读它的 get、put 方法,探究 ConcurrentHashMap 在并发情况下如何保证存取数据的安全 。说明:该源码来自于jdk_1.8.0_162get 方法public V get(Object key) { Nod...转载 2022-04-02 13:29:34 · 2237 阅读 · 0 评论 -
并发编程 —— ConcurrentHashMap size 方法原理分析
https://www.jianshu.com/p/88881fdfcf4c前言ConcurrentHashMap 博大精深,从他的 50 多个内部类就能看出来,似乎 JDK 的并发精髓都在里面了。但他依然拥有体验良好的 API 给我们使用,程序员根本感觉不到他内部的复杂。但,他内部的每一个方法都复杂无比,就连 size 方法,都挺复杂的。今天就一起来看看这个 size 方法。size 方法代码如下:public int size() { long n = sumC转载 2022-04-02 11:35:21 · 424 阅读 · 0 评论 -
ConcurrentHashMap里面也有死循环,作者留下的彩蛋了解一下?
https://www.toutiao.com/article/6838199855249097219/?timestamp=1592179075&app=news_article_lite&group_id=6838199855249097219&req_id=20200615075755010027024142236D2953&wid=1648794209198JDK BUG这篇文章,聊一下我最近才知道的一个关于 JDK 8 的 BUG 吧。首先说一下我是转载 2022-04-01 14:51:25 · 708 阅读 · 0 评论 -
JDK8 ConcurrentHashMap的Bug集锦
https://blog.csdn.net/anlian523/article/details/107328200前言JDK8的ConcurrentHashMap并不是完美的,从- Java Bug System上也可以看到JDK的很多Bug,当然,通过给concurrency-interest发邮件也可以和Doug Lea直接对话。最重要的是,知道了这些bug的存在,可以避免我们去分析这些不正确的代码的“正确性”。构造器关于构造器的bug public Concurre..转载 2022-04-01 14:23:10 · 334 阅读 · 0 评论 -
ConcurrentHashMap的sizeCtl含义纠正
https://blog.csdn.net/Unknownfuture/article/details/105350537引言: 本文基于JDK1.8版本,而且对ConcurrentHashMap有一定了解的人,本文并非科普该类的用法,而是针对sizeCtl的含义做出纠正科普文章推荐: 深入浅出ConcurrentHashMap1.8sizeCtl定义及注释 /** * Table initialization and resizing control. When neg...转载 2022-04-01 14:16:50 · 191 阅读 · 0 评论 -
JDK1.7和JDK1.8中HashMap为什么是线程不安全的?
https://blog.csdn.net/swpu_ocean/article/details/88917958前言只要是对于集合有一定了解的一定都知道HashMap是线程不安全的,我们应该使用ConcurrentHashMap。但是为什么HashMap是线程不安全的呢,之前面试的时候也遇到到这样的问题,但是当时只停留在知道是的层面上,并没有深入理解为什么是。于是今天重温一个HashMap线程不安全的这个问题。首先需要强调一点,HashMap的线程不安全体现在会造成死循环、数据丢失、数据覆转载 2022-04-01 10:25:34 · 781 阅读 · 0 评论 -
ConcurrentHashMap的源码分析-resizeStamp
https://blog.csdn.net/Leon_Jinhai_Sun/article/details/112062415这块逻辑要理解起来,也有一点复杂。resizeStamp用来生成一个和扩容有关的扩容戳,具体有什么作用呢?我们基于它的实现来做一个分析static final int resizeStamp(int n) { return Integer.numberOfLeadingZeros(n) | (1 << (RESIZE_STAMP_BITS - 1)); }转载 2022-04-01 09:20:36 · 291 阅读 · 0 评论 -
java8 ConcurrentHashMap源码&原理解读,保姆级解读,并行/并发编程思想
https://blog.csdn.net/qq_29031555/article/details/105907234前言之前研读过HashMap源码,实现过一遍HashMap源码。但是HashMap是线程不安全的,而ConcurrentHashMap是线程安全的,博主我觉得自己多线程方面差了点,遂决定去研究一番ConcurrentHashMap。这一看,emmm,妙呀,有时一个方法起码得研究好几天,打开一篇知识的海洋。笔者去年终于看完整个put方法的处理,〒▽〒,实现到扩容那里了。后面由于换工转载 2022-03-31 15:04:45 · 1499 阅读 · 0 评论 -
简单轻松地秒杀ConcurrentHashMap
https://blog.csdn.net/weixin_47184173/article/details/115038594?spm=1001.2014.3001.5502HashMap线程不安全怎么办?我们都知道HashMap结合了数组与链表(红黑树)的特性,可以快速的进行取值存值。然而他最大的弊端便是不能在多线程环境下使用(会造成值覆盖与循环链表)。映射到我们的代码中,最常见的就是我们不能写static Map map = new HashMap();这样的语法,供多个线程使用。那么,转载 2022-03-31 08:48:21 · 185 阅读 · 0 评论 -
AQS的前菜—详解CLH队列锁
https://blog.csdn.net/weixin_47184173/article/details/115340014什么是CLH队列锁CLH锁其实就是一种基于逻辑队列非线程饥饿的一种自旋公平锁。当多线程竞争一把锁时,获取不到锁的线程,会排队进入CLH队列的队尾,然后自旋等待,直到其前驱线程释放锁。由于是 Craig、Landin 和 Hagersten三位大佬的发明,因此命名为CLH锁。自旋锁与互斥锁的区别由于CLH锁是一种自旋锁,那么我们先来看看自旋锁是什么?自旋锁说白了转载 2022-03-31 08:46:33 · 3719 阅读 · 4 评论 -
Java8 Stream:玩转集合的筛选、归约、分组、聚合
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合_云深i不知处的博客-CSDN博客_java stream 聚合Java8 Stream 1 Stream概述 2 Stream的创建 3 Stream的使用 案例使用的员工类 3.1 遍历/匹配(foreach/find/match) 3.2 筛选(filter) 3.3 聚合(max/min/count) 3.4 映转载 2022-03-16 20:15:35 · 236 阅读 · 0 评论 -
关于Java集合中元素的删除问题详解
关于Java集合中元素的删除问题详解_Tommy·Vercetti 的博客-CSDN博客在集合遍历(迭代)过程中,不允许元素通过集合删除,可以通过迭代器进行删除因为在集合进行迭代过程中,不允许集合的结构发生改变import java.io.BufferedReader;import java.util.*;@SuppressWarnings({"all"})public class interate{ public static void main(String[] args) ..转载 2022-03-10 17:16:01 · 911 阅读 · 0 评论 -
Java HashSet的元素内容变化导致的问题
Java HashSet的元素内容变化导致的问题 - 一尾金鱼 - 博客园概述HashSet元素引用的对象的内容发生变化,会导致“元素不属于集合”的问题。事实上这个元素还在集合里,但是调用contains方法进行判断,得到的结果却是false。正文关于变化这里所讲的变化是指元素引用的对象的内容的变化,但是对象还是这个对象。比如我们定义如下的fieldprivate Set<Set<Integer>> cache = new HashSet<Set&转载 2022-03-09 20:27:51 · 257 阅读 · 0 评论 -
装饰器模式在 Collections 类中的应用
https://blog.csdn.net/u010711495/article/details/117676311 我们前面讲到,Java IO 类库是装饰器模式的非常经典的应用。实际上,Java 的 Collections 类也用到了装饰器模式。 Collections 类是一转载 2022-02-04 10:48:51 · 185 阅读 · 0 评论 -
集合框架讲解 ---- Java 集合框架(4)---- Set 相关类全面解析
https://blog.csdn.net/qq_45574180/article/details/112107537 引言 在上篇文章中Java 集合框架(3)---- Map 相关类解析,我们将剩下的常见的 Map 接口下的相关具体类做了一个解析,还有一些相关的类将会在转载 2022-02-03 09:53:05 · 103 阅读 · 0 评论 -
HashMap链表成环的原因和解决方案
https://www.sohu.com/a/341902281_100123073引导语在 JDK7 版本下,很多人都知道 HashMap 会有链表成环的问题,但大多数人只知道,是多线程引起的,至于具体细节的原因,和 JDK8 中如何解决这个问题,很少有人说的清楚,百度也几乎看不懂,本文就和大家聊清楚两个问题:1:JDK7 中 HashMap 成环原因2:JDK8 中是如何解决的。JDK7 中 HashMap 成环原因成环的时机1:HashMap 扩容时。2:多线程环境下。成环的具体代码转载 2022-01-31 16:44:03 · 3072 阅读 · 4 评论 -
为什么HashMap的数组长度要取2的整数幂以及求key的索引位置为什么可以用&运算来代替%运算
https://www.cnblogs.com/zhengwang/p/8136164.html根据hash数取数组下标i = hash & (n - 1);为什么可以用 & 运算符来模拟 % 操作?HashMap 的容量必须是 2 的次幂,所以其容量 n 转换成二进制中必然只有一位是 1,那么 n - 1,就是将最左边的那一位 1 变为 0,并且将其右边的 0 变成 1 ,再将得到的值和 hash 通过 & 按位相与,这样的话得到的结果必然不会大于 n-1,即通过位转载 2022-01-27 11:19:26 · 123 阅读 · 0 评论 -
集合框架讲解 ----- Java 集合框架(2)---- List 相关类全面解析
https://blog.csdn.net/qq_45574180/article/details/110630618?spm=1001.2014.3001.5502 引言 在上篇文章 Java 集合框架(1)— 概述 中我们从大体上看了一下 Java 中的集合框架,包括Li转载 2022-01-26 16:41:48 · 103 阅读 · 0 评论 -
集合框架讲解 ----- Java 集合框架 (1)---- 概述
https://blog.csdn.net/qq_45574180/article/details/110481355?spm=1001.2014.3001.5502 引言 此篇开始集合框架的学习,集合是我们在 Java 编程中相当常用的一个数据结构集。在看这个集合系列之转载 2022-01-25 13:36:37 · 145 阅读 · 0 评论 -
Java数组转List的三种方式及对比
https://blog.csdn.net/x541211190/article/details/79597236 前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。 一.最常见方式(未必最佳) 通过 Arr转载 2022-01-25 10:53:26 · 250 阅读 · 2 评论 -
栈中中pop和peek方法的异同点
【peek】找到但不移除此列表的头(第一个元素)。【pop】移除顶对象并作为此函数的值返回该对象。相同点:大家都返回栈顶的值。不同点:peek 不改变栈的值(不删除栈顶的值),pop会把栈顶的值删除。...转载 2022-01-06 19:11:16 · 710 阅读 · 0 评论 -
ArrayList HashMap非线程安全 List和Set线程安全实现方式
众所周知ArrayList是非线程安全的,内部采用Object[]数组实现,提供add、remove等操作。以下我们通过源码分析以下,如何线程不安全。public class ArrayTest { public static void main(String[] args) { List list = new ArrayList(); for (int i = 0; i < 10; i++) { new Thread(() ->转载 2021-12-27 21:30:16 · 161 阅读 · 0 评论