Java 数据结构 线程安全与线程不安全的有哪些?

线程安全的集合类 ConcurrentHashMap 和 java.util.HashTable 类很相似,但 ConcurrentHashMap 能够提供比 HashTable 更好的并发性能。Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包。java.util.concurrent.ConcurrentMap 接口表示了一个能够对别人的访问(插入和提取)进行并发处理的 java.util.Map。4、Stack: 栈,也是线程安全的,继承于Vector。 阅读详情

Java开发过程中,Set,Map,List等接口都有很多根据特定场景需要而具体实现的类,面试过程中难免会被考察。


常见数据结构底层实现

我们在了解线程安全与否之前,先要了解各数据结构的实现是什么

List

  • ArrayListObject[] 数组
  • VectorObject[] 数组
  • LinkedList: 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)

Set

  • HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素
  • LinkedHashSet: LinkedHashSetHashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的 LinkedHashMap 其内部是基于 HashMap 实现一样,不过还是有一点点区别的
  • TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)

Queue

  • PriorityQueue: Object[] 数组来实现二叉堆
  • ArrayQueue: Object[] 数组 + 双指针

Map

  • HashMap: JDK1.8 之前 HashMap 由数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间
  • LinkedHashMapLinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap
Map集合之LinkedHashmap LinkedHashmap源码剖析 LinkedHashMap简介 LinkedHashMap 是 HashMap 的子类, HashMap 有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put 到 LinkedHashmap 的节点一一串成了一个双向循环链表,因此它保留了节点插入的顺序,可以使节点的输出顺序输入顺序相同 LinkedHashMap 可以用来实现 LRU 算法 LinkedHashMap 同样是非线程安全的,只在单线程环境下使用 LinkedHashMap源码 publi 阅读详情

相关推荐

实现一个线程安全并且可以设置过期时间的LRU(LinkedHashMap原理)

思路分析: FIFO的思想是实现一个先进先出的队列,LRU的思想是在FIFO的基础上,将最近访问的节点转移到队列的头部 于是考虑可以用双向链表linkedList来实现,同时为了兼顾查询节点时的效率,结合HashMap来实现。 双向链表linkedList+HashMap的数据结构可以联想到LinkedHashMap,就需要我们自己来实现了。LinkedHashMap存储数据是有序的,可以...

taotao12312的博客 2105

线程之常用线程安全类型分析

本文一起看下在日常工作中我们经常用到的线程安全的数据类型,以及一些经验总结。

wang0907的博客 1702

西门子Simotion运动控制

SIMOTION

rjimhcd的博客 2998

LinkedHashMap线程安全解决

LinkedHashMap线程安全解决

qq_54707244的博客 5914

OpenCV C++基础篇:cv::Mat内存模型编译链接避坑指南

cv::Mat是OpenCV中核心图像容器,但其本质并非普通STL容器,而是融合引用计数、浅拷贝语义内存对齐机制的智能指针式对象。理解其底层原理(如step步长、ROI共享、clone深拷贝)是避免段错误、内存泄漏和Release模式崩溃的关键。同时,C++环境下OpenCV的编译链接涉及ABI兼容性、运行时库匹配及模块化依赖(如opencv_imgproc、opencv_videoio),常见LNK2019错误往往源于工具集一致或缺失动态链接库。结合vscode配置c++环境和opencv下载安装教程

weixin_33831673的博客 317

JAVA基础面试题(第八篇)上! 集合数据结构

/ 容纳键值对的最大值// 负载因子int size;Node[] table的初始化长度length(默认值是16),Load factor为负载因子(默认值是0.75),threshold是HashMap所能容纳键值对的最大值。也就是说,在数组定义好长度之后,负载因子越大,所能容纳的键值对个数越多。

布洛芬 1048

线程安全

线程安全在Wikipedia里面的定义: Thread safety is a computer programming concept applicable to multi-threaded code. Thread-safe code only manipulates shared data structures in a manner that ensures that all thr...

304

HashMap是线程安全的吗,线程安全的Map有哪些

线程安全:HashMap是非线程安全的,如果在多线程环境下使用,需要进行额外的同步处理,或者使用线程安全的ConcurrentHashMap。ConcurrentHashMap:它是线程安全的,采用分段锁机制,同的段(Segment)可以被同的线程同时访问,从而提高了并发性能。HashMap 是非线程安全的,因为它是同步的,多个线程同时对 HashMap 进行操作可能会导致数据一致的问题。高效的插入、删除和查找操作:由于使用哈希表来存储键值对,HashMap提供了快速的插入、删除和查找操作。

Fking4的博客 905

线程安全线程并发容器

线程安全问题

m0_59091195的博客 183

java vector 线程安全_java vector的多线程安全是否有用

在网上搜了少文章,发现有少没讲清楚的,也有少好文,本文希望更易懂地描述该问题。如有对的地方,请多多指正~~vector的使用主要有如下两种场景:(1)vector所谓的多线程安全,只是针对单纯地调用某个方法它是有同步机制的。如add,多个线程都在对同一个容器add元素,vector能够保证最后总数是正确的,而ArrayList没有同步机制,就无法保证。(2)vector的多线程安全,在组合...

weixin_39766910的博客 686

Java 线程安全

线程安全概念: 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。引起线程安全问题的根源: 线程安全问题都是由全局变量及静态变量引起的。读和写操作 若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,

流风雨情的博客 757

java集合各实现类的区别以及线程安全和同步

Java中提供给程序开发使用处理数据结构的一种方式。 数组的局限性太大了!!! 1. 数组要求数据类型一致化!!! 2. 数组的容量确定之后无法更改!!! 3. 数组操作没有太多的配套方法,需要程序员自己完成!!! 集合解决的问题: 1. 可以满足多个数据类型,但是同时又做到了数据类型一致化操作【泛型】 2. 底层保存数据的容量是可以发生改变的 3. 有足够多的配套方法,可以满足最基本的增删改查操作 CRUD 集合可以看作是一种容器,用来存储对象信息。所有集合类都在 java.uti.

weixin_42260782的博客 617

Java面试题总结 | Java面试题总结5- 数据结构模块(持续更新)

数据结构模块总结

小七自学博客 1191

线程安全的集合

集合概述 Java中除了以Map结尾的类之外

Re_view的博客 484

线程安全的集合

记忆法:喂,SHE  vector  statck hashtable enumeration vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经太建议使用。 statck:堆栈类,先进后出 hashtable:就比hashmap多了个线程安全 enumeration:枚举,相当于迭代器 h

Rynell的博客 477

线程进阶:常见数据结构安全性分析

本文是Java数据结构和多线程的应用学习,认识常用数据结构线程安全性,理解某些集合安全的原因,以及某些集合底层如何实现的线程安全性。

qq15035899256的博客 1604

Java中HashMap为什么线程安全

HashMap内部使用数组+链表/红黑树结构存储数据,多线程操作可能破坏链表或树的完整性。多个线程同时修改可能导致数据丢失或覆盖。专为并发设计的实现,采用分段锁(JDK7)或CAS+synchronized(JDK8+),推荐作为首选替代方案。早期线程安全实现,所有方法使用synchronized修饰,性能低下,已推荐使用。在扩容时,多线程可能导致Entry链表形成环形结构,调用get()时出现无限循环。两个线程同时put时,若计算出的数组索引相同,可能出现后写入的值覆盖前一个值。

2503_93878379的博客 265

JAVA集合面试知识点

线程安全: Vector、HashTable 线程安全:HashMap、TreeMap、HashSet、ArrayList、LinkedList 2、 Arraylist LinkedList 异同 Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向循环链表数据结构; ArrayList 查询 O(1),插入 O(n);LinkedList 查询 O(n),插入 O(1); ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而Li.

weixin_47626220的博客 523

java map 线程安全_理解和讨论HashMap的线程安全

引发的问题,探讨在某些特定的多线程环境下是是能直接使用HashMap?在哪些特定的并发环境下能否正常使用呢?众所周知HashMap线程安全的,但到底HashMap在什么情况才线程安全? 查看HashMap的源码,内部有一个modCount变量,在put、remove、等等进行结构性修改时改变这个值。在Hash Iterator中记录expectedModCount变量,在遍历或者删除时...

weixin_39534780的博客 418
上一篇: Redis中的排序可以怎么实现?
下一篇: 网络传输中的粘包是怎么回事? 计算机网络常考面试题
小K说
博客等级 码龄7年 250粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值