Java集合 && Android提供的集合

11 篇文章 0 订阅


LinkedList 底层结构是双重链表,线程不安全,可存储null,存储数据可重复,并且可用作堆栈,队列,双端队列

同步方式可以使用List list = Collections.synchronizedList(new LinkedList(...));

增删要比ArrayList高效


ArrayList 底层是结构为可变数组,线程不安全,可以存储null,存储数据可重复

同步方式 List list = Collections.synchronizedList(new ArrayList(...));


Vector 底层实现可变为可变数组,线程安全,存储数据可重复


CopyOnWriteArrayList 底层结构为ArrayList(写时复制),线程安全的(add set 操作都是对数组重新复制来实现的),迭代时不支持添加,删除,修改

适合读多写少的操作

内存一直性:happens-before 多线程时,修改的操作要先发生于删除的操作

HashSet 底层结构是HashMap(数据存储在HashMap中的key里),线程不安全,迭代顺序不可知,可以使用null作为元素最多只能有一个,存储数据不可重复,通过equels比较

同步方式 Set s = Collections.synchronizedSet(new HashSet(...));


LinkedHashSet 底层结构是LinkedHashMap(Hash表和双重链表),线程不安全,迭代顺序可知,可以使用null作为元素,存储数据不可重复


TreeSet 底层结构是TreeMap,线程不安全,会给存储元素进行排序,需要实现Comparable,可以使用null作为存储远程,存储数据部不可重复


CopyOnWriteArraySet 底层基于CopyOnWriteArrayList,线程安全,不能存储相同元素,


ConcurrentSkipListSet 底层基于ConcurrentSkipListMap,线程安全,根据自然顺序排序


PriorityQueue 底层实现基于优先级堆的无界优先队列,线程不安全,根据元素自然顺序进行排列,存储元素不能使用null,不可以插入不可比较的元素


ConcurrentLinkedQueue 底层基于链表无界队列,线程安全,先进先出原则对元素进行排列,

CAS算法来操作出队,入队的

CAS是区别于synchronized的锁的方法,他是乐观锁,是一种无锁的算法


ArrayDeque 底层实现可变数组,线程不安全,没有容量限制,不能存储null,此类很可能在用作堆栈是快于Stack,用作队列时快于LinkedList


ConcurrentLinkedDeque 底层实现链表的无界队列,线程安全,先进先出对元素进行排序,同样使用CAS保证数据的同步


ArrayBlockingQueue 底层实现数组支持的有界阻塞队列,线程安全

LinkedBlockingQueue 底层实现基于链表的无界队列,线程安全

DelayQueue Delayed元素的无界队列,Delay元素是带有延时标记的,延时满后才能取元素,此队列不能存储null

PriorityBlockingQueue 底层实现无界阻塞队列,使用PriorityQueue相同的存储元素的方式,不能存储null,取出时提供阻塞获取操作,不可以插入不能比较的值

SynchronousQueue 一种阻塞队列,底层实现每一个插入操作必须等待另一个线程的移除操作,没有任何存储容量

LinkedTransferQueue 基于链表的无界队列 类似SynchronousQueue,他是有容量的

LinkedBlockingDeque 基于链表的阻塞双端队列



HashMap 基于Hash表,线程不安全,key存储无序,可以使用null key null value (除了非同步,和可以使用null外,HashMap和HashSet没什么不同)

HashMap 在put数据时首先使用hashCode然后寻找数组中的位置,如果没值存储,如果有值使用equals比较,如果相等替换,如果不等插曲列表的前部,8.0修改为如果大于一个阈值链表变为红黑树增加查找效率

参考文章 https://blog.csdn.net/baidu_19473529/article/details/79121271



LinkedHashMap Hash表链表实现,线程不安全,可知迭代顺序,可以使用null key null value 

TreeMap 基于红黑树,线程不安全,key存储有序,注意equals和comparable ,key不能为null

ConcurrentHashMap 哈希表,线程安全,采用分时锁机制, 不可以使用null,键或值

ConcurrentSkipListMap 根据键的自然顺序排序,线程安全,不可以使用null,键或值,实现同步的原理是CAS


ArrayMap 继承自Map集合 存储key value

ArrayMap和SparseArray有点类似;其中含有两个数组,一个是mHashes(key的hash值数组,为一个有序数组),另一个数组存储的是key和value,其中key和value是成对出现的,key存储在数组的偶数位上,value存储在数组的奇数位上。

内部原理也是使用二分查找

SparseArray 采用时间换空间提高手机执行效率,key为int,value为Object,创建两个数组通过二分查找,相对于HashMap查找时间变长了,但是节省了存储空间



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值