
集合
文章平均质量分 90
ZMXQQ233
Nothing to give up
展开
-
【集合】集合
集合在jdk的java.util包下,集合主要派生自Collection接口和Map接口,Collection接口属于对象的集合,Map接口属于键值对的集合。实现自Collection接口的又有List接口(有序可重复)和Set接口(不可重复)。List接口的实现类有LinkedList(基于链表,增删快,查询慢,线程不安全),ArrayList(基于数组,查询快,增删慢,线程不安全),Vector(基于数组,线程安全,读写都加锁,每个方法都加了synchronized),CopyOnWriteAr原创 2021-03-05 23:36:01 · 275 阅读 · 0 评论 -
【集合】ArrayList异常ConcurrentModificationException原因及解决办法
1.并发不安全—并发修改异常今天遍历并删除ArrayList中的map时遇到了这个问题:并发修改异常代码大概如下:for(Map<String, Object> resultMap: list){ if (...){ list.remove(resultMap); }}看一下这段代码的字节码文件:Iterator var6 = list.iterator();while(true) { Map resultMap; if (!var6原创 2020-11-16 22:23:30 · 1559 阅读 · 0 评论 -
搞定HashMap线程不安全问题-----ConcurrentHashMap源码解析
搞定HashMap线程不安全问题-----ConcurrentHashMap源码解析前言 HashMap是线程不安全的集合,如果要保证线程安全该怎么做呢? 首先,HashMap为什么会线程不安全? jdk1.7中,在多线程环境下,(头插法)扩容时会造成环形链或数据丢失。 jdk1.8中,在多线程环境下,PUT方法会发生数据覆盖的情况。 如何保证线程安全?//替代HashMap的方式public static void main(String[] arg原创 2020-09-07 13:31:24 · 324 阅读 · 0 评论 -
HashMap源码分析详细注释版----JDK1.8版本
HashMap源码列举并解释了一些JDK1.8版本的HashMap源码,所有方法和重要的细节源码中的注释都解释的非常清楚。我只是按照自己的理解搬运了一遍。文章的代码顺序按照源码中出现的顺序。源码最开始的内容,几个比较重要的参数。/** * 默认初始化容量,必须是2的次方 */static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/** * 最大容量。即HashMap的数组容量必须小于等于 1 <<原创 2020-08-13 16:08:02 · 276 阅读 · 0 评论