码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java集合面试小结(2)


    1. 哪些集合类是线程安全的?

    • Vector:就比Arraylist多了个 synchronized (线程安全),因为效率较低,现在已经不太建议使用。
    • hashTable:就比hashMap多了个synchronized (线程安全),不建议使用。
    • ConcurrentHashMap:是Java5中支持高并发、高吞吐量的线程安全HashMap实现。它由Segment数组结构和HashEntry数组结构组成。Segment数组在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键-值对数据。一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构;一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素;每个Segment守护着一个HashEntry数组里的元 素,当对HashEntry数组的数据进行修改时,必须首先获得它对应的Segment锁。(推荐使用)

    2. Java集合的快速失败机制 “fail-fast”?

    是java集合的一种错误检测机制,当多个线程对集合进行结构上的改变的操作时,有可能会产生fail-fast机制。

    例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修改了集合A的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出ConcurrentModificationException异常,从而产生fail-fast机制。

            原因:迭代器在遍历时直接访问集合中内容,并且在 遍历过程中使用一个modCount 变量,集合在遍历时直接访问集合中的内容,并且在遍历过程中使用一个modCount变量。集合在被遍历

    期间如果内容发生变化,就会改变modCount变量是否为expectedmodCount值,是的话就返回遍

    历;否则抛出异常,终止遍历。

            解决办法:

    1.在遍历过程中,所有涉及到改变modCount值得地方最全部加上synchronized.

    2.使用CopyOnWriteArrayLIst来替换ArrayList;

    3. 怎么确保一个集合不能被修改?

    • 可以使用 Collections. unmodififiableCollection(Collection c) 方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常。
    • 示例代码如下:

    List list = new ArrayList<>();
    list. add("x");
    Collection clist = Collections. unmodifiableCollection(list);
    clist. add("y"); // 运行时此行报错
    System. out. println(list. size());

  • 相关阅读:
    opencv图像的直方图,二维直方图,直方图均衡化
    golang gin——controller 模型绑定与参数校验
    程序员的护城河:技术深度、创新追求与软实力的完美结合
    Windows系统解压zip文件之后乱码的问题的原因和解决方法
    RFID电子标签实现仓储物流托盘智能化管理
    【iOS逆向与安全】好用的一套 TCP 类
    阿里云 OSS 上传插件layui-aliossuploader升级为带进度条及单项回调
    【QT进阶】Qt http编程之实现websocket client客户端
    【代码随想录】二叉树刷题
    腾讯云服务器端口localhost可以访问,外部无法访问解决
  • 原文地址:https://blog.csdn.net/Lxcjl/article/details/126899209
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号