Java之Collection集合特性简介说明

戚薇 Java教程 发布时间:2023-07-04 11:47:50 阅读数:17169 1
下文笔者讲述Collection中常见集合及其特性简介说明,如下所示

Collection中常见集合

list:
 ArrayList
 LinkedList
 Vector
 Stack
 CopyOnWriteArrayList

Set
 HashSet
 TreeSet
 CopyOnWriteArraySet

Map
  HashMap
  LinkedHashMap
  TreeMap
  Hashtable
  ConcurrentHashMap

每一个集合的特性说明

ArrayList
    ArrayList:非线程安全
	ArrayList数据存储原理:
	    底层采用数组进行存储(使用Object[]数组来存储元素)
    ArrayList特性:
	    查询效率高 
		增加效率低
        如果不考虑查询效率或元素个数少的时候可以使用ArrayList;

LinkedList
    LinkedList:非线程安全
    LinkedList数据存储原理:双向链表
    LinkedList特性:
	    查询效率低
		增加效率高
		当出现大量添加而不需要大量的查询的时候可以考虑使用LinkedList
		可通过get(index)方法获取元素
		   LinkedList,有first与last成员变量
		     代表第一个元素和最后一个元素
			   当通过get进行查询时
			    先会比较在前半段还是后半段
			 当在前半段
               将通过first节点依次向后进行遍历
			 当在后边半段,将通过last节点依次向前遍历(双向链表)

Vector
      Vector:线程安全(synchronize方法锁)
      Vector数据存储原理:
	      同ArrayList原理相同,在此基础上加上了synchronzed的方法锁
      Vector特性:
	      synchronzed的方法锁导致Vector的锁粒度太大
           在并发场景下,效率很低所以基本没有使用情况

Stack
     Stack:线程安全(synchronize方法锁)
     Stack是在Vector的基础上封装了push与pop方法
     Stack特性:同Vector相同

CopyOnWriteArrayList
      CopyOnWriteArrayList:线程安全(使用ReentrantLock可重入锁)
      CopyOnWriteArrayList数据存储原理:
	      写时复制技术
		  在添加的时候会创建一个原来的副本,以供读操作

Set
HashSet
    HashSet:非线程安全
    HashSet存储原理:
	   底层还是HashMap,维护一个HashMap<T, Object> map;
    HashSet特性:无重复元素,查询与添加的效率较高;

TreeSet
    TreeSet:非线程安全
    TreeSet数据存储原理:
	   红黑树——通过构造函数可以知道TreeSet其实就是在维护TreeMap
 
CopyOnWriteArraySet
    CopyOnWriteArraySet:线程安全(使用ReentrantLock可重入锁保证线程安全)
    CopyOnWriteArraySet数据存储原理:
	    写时复制技术,在添加的时候会创建一个原来的副本,以供读操作

Map
    HashMap
       HashMap:非线程安全
       HashMap数据存储原理:
	        数组+链表+红黑树(JDK1.8后)、数组+链表(JDK1.7)
       HashMap特性质:
	       以牺牲空间来换取时间,每个元素以键值对的方式进行存储;
		   添加元素时,会先计算哈希值进行位运算找到对应的桶位, 
		       若桶位以有元素,将以链表的方式存在相同的桶位下,
			    当冲突严重链表的长度达到8时进行树(红黑树)化;
				若元素个数达到集合容量的75%时(装填因子0.75),
				 将会触发扩容机制;

LinkedHashMap
     LinkedHashMap:非线程安全
     LinkedHashMap存储数据原理:
	     数组+链表+红黑树+双向链表(JDK1.8后)、数组+链表+双向链表(JDK1.7)
     LinkedHashMap特性:
	      在继承HashMap的数据结构基础上多了双向链表,保持快速查询,还具有添加顺序与,遍历顺序相同的性质

TreeMap
    TreeMap:非线程安全
    TreeMap数据存储原理:红黑树
    TreeMap特性:
	    继承于SortedMap接口
		性质与红黑树性质相同
		需要我们实现Comparable接口的实现类
		 提供比较规则;

Hashtable
    Hashtable:线程安全(synchronize方法锁) 


ConcurrentHashMap
	ConcurrentHashMap:线程安全(Unsafe类+synchronize对象锁)
    ConcurrentHashMap存储原理:和HashMap相同,在此基础上增加锁机制,解决高并发场景的数据安全问题
    ConcurrentHashMap特性:
	    与HashMap相同,但与Hashtable在锁机制方面不同
        ConcurrentHashMap使用Unsafe类提供的CAS(乐观锁 | 自旋锁)和synchronize对象锁
		   减少了锁的粒度,而Hashtable使用synchronize方法锁
		   当同时调用put方法时,需要等另一个线程执行完毕时释放锁,才能再次执行put方法;
注意事项:
   当选择使用Hashtable不需要线程安全时,可选择使用HashMap
    在高并发的情况下可选择ConcurrentHashMap
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202307/6987.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者