JAVA集合使用概述

更新时间:2018-10-15 14:23:00点击次数:373次

Set集合概述
1.继承自collection接口
2.无序存放
3.没有重复元素
常用Set集合
HashSet
1.使用HASH算法来存储元素
2.equals() / hashCode()方法比较对象相等
LinkedHashSet
1.与HashSet类似
2.链表结构保存插入顺序
TreeSet
1.继承自SortedSet
2.集合中元素排序

支持并发的Set集合
1.CopyOnWriteArraySet : 线程安全的无序的集合
内部实现为CopyOnWriteArrayList

2. ConcurrentSkipListSet : 线程安全的有序的集合
内部实现为ConcurrentSkipListMap

3. Collections.synchronizedSet(set)

Set集合总结:
HashSet适用于普遍场景
TreeSet是有序集合
LinkedHashSet保持插入时顺序

Collections.synchronizedSet(set)适用于普遍高并发场景
ConcurrentSkipListSet是有序集合
CopyOnWriteArraySet使用ReentrantLock实现,有更好性能,适用于读多写少的高并发场景

List集合概述:
继承自collection接口
有序存放
允许重复元素
ArrayList
1.基于动态数组实现
2.扩容机制
3.查询元素快,插入,删除中间元素慢
在这里插入图片描述
LinkedList
1.基于双向链表实现
2.查询元素慢,插入,删除中间元素快
在这里插入图片描述
支持并发的List集合:
1.Vector:基于数组实现,与ArrayList类似,线程安全(方法被synchronized修饰)
2.CopyOnWriteArrayList:写时复制(读写分离),使用ReentrantLock
List集合总结 (ArrayList VS LinkedList):
1.ArrayList查询快,写数据慢;LinkedList查询慢,写数据快
2.ArrayList查询快是因为底层是由数组实现,通过下标定位数据快。写数据慢是因3.为复制数组耗时。LinkedList底层是双向链表,查询数据依次遍历慢。写数据只需修改指针引用
4.ArrayList和LinkedList都不是线程安全的,小并发量的情况下可以使用Vector,若并发量很多,且读多写少可以考虑使用CopyOnWriteArrayList,因为5.CopyOnWriteArrayList底层使用ReentrantLock锁,比使用synchronized关键字的Vector能更好的处理锁竞争的问题

Map集合
常用的Map类:
1.HashMap:非线程安全,equals和hashCode,key和value允许null
在这里插入图片描述
2.LinkedHashMap:非线程安全,满足HashMap特性,存入顺序和取出顺序一致
在这里插入图片描述
LinkedHashMap顺序保证:
在这里插入图片描述
3.TreeMap:非线程安全,数据排序,firstEntry()就是取出的排序后最大或最小的值
在这里插入图片描述
4.HashTable:数据结构和HashMap差别不大,线程安全,方法名前加synchronized,key和value不允许null
在这里插入图片描述
5.Collections.synchronizedMap:
在这里插入图片描述

性能对比:
单线程:
HashMap>SynchronizedMap>Hashtable>ConcurrentHashMap
多线程:
ConcurrentHashMap>SynchronizedMap>Hashtable

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息