【集合】List、Map、Set部分实现类是否线程安全

作者&投稿:雷国 (若有异议请与网页底部的电邮联系)
~

1.1 ArrayList 不是线程安全的。多线程情况下操作ArrayList 不是线性安全的,可能会抛出 java.util.ConcurrentModificationException 并发修改异常。
1.2 Vector 是线程安全的。Vector对add和get方法都加了关键字synchronized修饰,所以是线程安全的,但是同一时间只能有一个线程访问进行读写,所以性能慢。

1.3 Collections.synchronizedList(List<T> list) 通过Collections的synchronizedList静态方法,可以返归一个线程安全的SynchronizedList对象。SynchronizedList是Collections的静态内部类。

synchronizedLis 和 Vector的区别

1.4 CopyOnWriteArrayList<E> 写入时复制(CopyOnWrite)思想
数据存放在一个Object数组中,在进行add和set操作时会上锁,同时copy一份原始的Object数组,在完成add和set操作后,重新setArray,释放锁。get操作没有加锁,如果读的时候有多个线程正在向CopyOnWriteArrayList添加数据,不会阻塞,读还是可以读到旧的数据。

一个测试各种List是否安全的例子:

2.1 HashMap<> 不是线程安全的。多线程情况下操作HashMap不是线性安全的,可能会抛出 java.util.ConcurrentModificationException 并发修改异常。
  HashMap就有点复杂了,1.7由数组+链表实现,1.8由数组+链表+红黑树实现,不深入了,得单独学。
2.2 Collections.synchronizedMap( new HashMap<>()) 通过Collections的synchronizedMap静态方法,可以返归一个线程安全的SynchronizedMap对象。SynchronizedMap是Collections的静态内部类。 get和put都加锁

2.3 class ConcurrentHashMap<K,V> 来自 java.util.concurrent.ConcurrentHashMap,支持检索的完全并发性和更新的高预期并发性的哈希表,单独学。
一个测试各种Map是否安全的例子:

3.1 class HashSet<E> 不是线程安全的。
  HashSetd底层由HashMap实现,HashSet的add方法调用对的是HashMap的put方法,传输的key是将传入set的元素,传入的value是一个固定的Object对象。

3.2 class TreeSet<E> 不是线程安全的。
3.3 Collections.synchronizedSet(new HashSet<>()) 是线程安全的。
3.4 class CopyOnWriteArraySet<E> 是线程安全的。
一个测试各种Set是否安全的例子:




Set,List 和 M
在Java的***.util包中,Java集合框架的核心三大类分别是Set、List和Map。它们都是接口,各自拥有不同的实现类。Set主要包括HashSet和TreeSet,它存储的对象不重复且无特定排序,但TreeSet提供了可定制的排序功能。List的典型实现是ArrayList,其中的元素有序且允许重复,通过索引(如***.get(i))可以...

cad表示长度快捷键(cad测量长度的快捷键)
1、利用【PL】命令测量多条线段长度: 使用多段线【pline】命令快捷健【PL】,连续在测量点上画线,再用【list】快捷健【LI】或者【LS】命令点这条线确认就会出现该线的属性,可以看到该线段的总长度和该线段区域的面积。2、利用【PE】命令测量线段多条线段的长度: 输入:【PE】回车确认,【M】回...

List 、Set、 Map有什么区别和联系
1、List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入...

java 求一个list集合中出现次数最多的一项,和此项的出现次数,有简单的...
String regex;Pattern p;Matcher m;Test public void st() { List<String> list = new ArrayList();list.add("aa");list.add("aa");list.add("aa");list.add("aa");list.add("bb");list.add("bb");list.add("cc");list.add("cc");list.add("dd");list.add("ed");\/\/ St...

JAVA的小问题:将26个英文字母存放在一个list集合中,然后从集合中读出显...
完整代码:public class CollectTest { String str = "abcdefghijklmnopqrstuvwxyz"; ArrayList<String> list = new ArrayList<>(); public void addColectAndPrint() { String[] strings = str.split(""); \/\/ 放在集合里面 for (int i = 0; i < strings.length; i++) ...

如何统计python list中元素的个数及其位置
可以用set,直接去掉重复的元素list2.sort(reverse=False)将列表由小到大排序L2=len(list2)列表list2的长度print('集合:'+str(list1))for m in range(L2): X=set()设定一个空的集合,用来存放这个元素的所在的位置 start=list1.index(list2[m])for n in range(L1):stop=L1 if lis...

java创建一个ArrayList集合,存入26个字母.屏幕读取一个页数(默认每页显 ...
public class Test {public static void main(String[] args) {List list = Arrays.asList('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h','i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',

c# list移除第0个元素后面会自动往前移吗?
C# 中 List 其本质是一连串的地址,所以删除第一个元素后后面的确会往前移动,只是下标移动,并不是地址移动。如果你想在for循环中删除某个元素的话,最安全的做法是倒序删除

服装Mlist是什么意思?
服装Mlist是指在Maison Margiela旗下的品牌Mm6 Maison Margiela所推出的一个潮流时尚概念,该概念以灵感、形式和混合性为特点,是一种折衷主义的设计语言。服装Mlist融合了多种风格元素的感官经验,使得这些元素在混合和匹配的过程中能够相互交融,形成一种新的独特风格。其设计理念是展现出一种从日常生活中...

c# List<实体>转换List集合
用ConvertAll方法转换 List<Object> m= list.ConvertAll(s=> (object)s);

徐州市15222733102: 集合类List/Set/Map.的区别和联系 -
靳店湿毒: 首先list与set都继承于Collection,list序列的形式存储元素.所以取出来的顺序可能和放入顺序不同.set的特点是无法存放重复的元素.map一个映射不能包含重复的键;每个键最多只能映射一个值.以键值对存放数据以上三个都是接口且不能被实例化.

徐州市15222733102: java中list和map的区别 -
靳店湿毒: 1、Java中的集合包括三大类,它们是Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类.Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap. ...

徐州市15222733102: Java集合类List/Set/Map的区别和联系 -
靳店湿毒: 常用的集合类有一下几种: List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类 Map结构的集合类:HashMap类,Hashtable类 Set结构的集合类:HashSet类,TreeSet类 Queue结构的集合:Queue接口 HashMap和Hashtable的区...

徐州市15222733102: Java中Set、List、Map集合类(接口)的特点及区别.分别有哪些常用实现类. -
靳店湿毒: list与Set、Map区别及适用场景1、List,Set都是继承自Collection接口,Map则不是2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的...

徐州市15222733102: java中list,set和map 的区别 -
靳店湿毒: Set,List,Map的区别 java集合的主要分为三种类型:Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组:数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存...

徐州市15222733102: set和list和map的区别 -
靳店湿毒: Set(集合) Set是最简单的一种集合.集合中的对象不按特定的方式排序,并且没有重复对象. Set接口主要实现了两个实现类:HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快TreeSet :TreeSet类实现了SortedSet接...

徐州市15222733102: Java集合中List和 Map区别? -
靳店湿毒: 一个是存储单列数据的集合,,另外一个是存储键和值这样的双列数的集合,List中存储的数据是有顺序的,并且允许重复...Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的...List继承Collection接口,,Map不继承Collection接口.

徐州市15222733102: List, Set, Map的区别? -
靳店湿毒: list是最常用的 它其实就是一种可以自由改变长度的数组 set和list基本的用法差不多 区别在于 set里不能放相同的元素 至于map 这个和上边2个在用法上有很大差别 map里储存的是键值对 可以根据键来值搜索值 键是唯一的 值可以重复.. 学Servlet和jsp的时候 会有大量的map的应用

徐州市15222733102: List、Map、Set按存储方式说说都是怎么存储的? -
靳店湿毒: collection、set、list、map这些都是java中常见的集合,对于初学者来讲这些是非常容易混淆的,首先让我们从整体上对这些集合有个大致的了解然后我们再进行区分.1.collection:集合层次中的根接口,jdk没有提供这个接口直接实现的类....

徐州市15222733102: JAVA里面的集合类中,List、Set、Map有什么比较具体的应用,书上讲的不太好理解
靳店湿毒: 首先得明白这三者有什么异同点吧. List接口 它的实现类是容量可变的列表,可按索引访问集合中的元素,是有序的集合. 常用的实现类:ArrayList、LinkedList Set接口 不包含重复元素的Collection,也就是说Set中最多只能有一个null元素. ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网