Collection详解

转载请注明链接:https://blog.csdn.net/feather_wch/article/details/82500481

详解Collection集合中各个部分的知识点。有部分集合会额外分析源码。

Collection详解

版本号: 2018/9/7-1(18:18)


问题汇总

总览(8)

1、Collection的组成部分

  1. 具有Collection的接口,根据特性分为list、Set、Queue三大类。
  2. 具有抽象类AbstractCollection封装了,集合的骨干方法

2、既然已经有了Collection接口,为什么还定义了AbstractCollection这个抽象类?

  1. List、Set、Queue虽然主体不同,但仍然有共同的行为
  2. 因此提供AbstractCollection封装这些行为。

3、Collection相关内容的包

java.util.*

4、集合的区别

线程安全性初始容量扩容机制其他
ArrayList×-异步0+10(第一次add时)1.5 * n
LinkedList×-异步不存在不存在
SynchronizedList√-同步和原始List一致和原始List一致
Vector√-同步102 * n
Stack√-同步102 * n
Hashtable√-同步112 * n + 1
HashMap×-异步162 * n
ConcurrentHashMap√-同步162 * n
  1. 线程安全的有几种集合:5种
  2. 非线程安全的有几种集合:3种

5、要求线程安全用什么?

Vector、hashtable、SynchronizedList、ConcurrentHashMap

6、没有线程安全要求用什么?

ArrayList、LinkedList、HashMap

7、有键值对?

HashMap、HashTable

8、数据量很大且要求线程安全

Vector

Collection(7)

1、Collection接口的作用?

  1. 集合的根接口

2、Iterable接口的作用?

  1. 实现该接口能让对象能够成为for-each loop语句的目标
  2. iterator()方法:需要返回自己的迭代器

List

3、List接口的作用

  1. 一种有序集合,实现该接口会具有以下特点:
  2. 有序
  3. 可以重复
  4. 可以有null元素

Set

4、Set接口的作用

  1. 一种集合,其中的所有元素都不能重复。
SortedSet

5、SortedSet的作用

  1. 提供有序的set集合(其中所有的元素都不能重复)

Queue

6、Queue接口的作用

  1. 一种集合,会持有元素的优先级并进行处理。
Deque

7、Deque接口的作用

  1. 一种线性集合,支持在两端的元素插入和删除
  2. removeFirst()/Last()
  3. offerFirst()/Last()
  4. pollFirst()/Last()
  5. getFirst()/Last()
  6. peekFirst()/Last()

AbstractCollection(14)

1、AbstractCollection抽象类的作用

  1. implements Collection接口
  2. 此类提供了集合接口的骨架实现

AbstractList

2、AbstractList抽象类的作用

  1. 继承AbstractCollection
  2. 实现List接口,提供了列表接口的骨架实现。
ArrayList

3、ArrayList的特点(7)

  1. ArrayList基于数组实现(底层是Object数组),访问元素效率高,插入删除元素的效率低。
  2. 实现List接口:意味着有序、可以重复、可以有null元素
  3. 实现RandomAccess接口:意味着ArrayList支持快速随机访问Collections对于实现了RandomAccess接口的List会使用索引二分查找算法进行查找。
  4. 实现Cloneable接口:标识着可以被复制。ArrayListclone()复制其实是浅复制
  5. 实现Serializable接口:标识着集合可以被序列化。
  6. 绝大多数情况下应该指定ArrayList初始容量:避免进行耗时的扩容操作,在能预知的情况下尽量使用刚刚好的列表,从而不浪费任何资源。
  7. 非线程安全

4、ArrayList的扩容机制

  1. ArrayList的默认容量为10(本质默认初始化为空数组,第一次add时会扩容到10)
  2. 扩容1.5倍进行扩容。
  3. 扩容:会创建一个更大的数组,然后将旧数组的数据都复制过去,该过程是低效率

5、ArrayList源码总结出的效率技巧

List提供了indexOf和lastIndexOf查询指定元素的索引(index),这些方法是从头和从尾部一个个查询的。显然可以直接使用Collections的binarySearch通过二分查找,效率会更高。

Vector

6、Vector的特点

  1. 基于数组实现
  2. 支持快速随机访问
  3. 线程安全: 在不需要同步时,性能比ArrayList低,需要同步时使用SynchronizedList更好。
  4. 扩容机制:每次扩容都是原来容量大小的2倍
  5. 适合大量数据的时候。
Stack

7、Stack的特点

  1. Stack继承自Vector,扩展了的相关方法。
  2. 具有pop、push、peek等方法(LinkedList也有这些方法)。
AbstractSequentialList

8、AbstractSequentialList的作用

  1. 实现该接口表明需要sequential access顺序存取数据,例如,链表(linked list)
LinkedList

9、LinkedList的特点

  1. LinkedList基于链表实现,插入和删除效率高,访问元素效率低(这是链表的特点)
  2. LinkedList可以作为队列、栈来使用。
  3. 队列(先进先出):offerFirst、pollLast
  4. 栈(后进先出):pop、push
  5. 非线程安全

10、LinkedList继承的抽象类和实现的接口?

AbstractSequentialListListDequeCloneableSerializable
顺序存储数据有序、可以重复、元素可以为null可以两端增加和删除数据可以拷贝,浅拷贝可序列化

11、LinkedList实现了几个接口?几个抽象类?

  1. 4个接口
  2. 1个抽象类

AbstractSet

12、AbstractSet抽象类的作用

  1. 继承AbstractCollection
  2. 实现Set接口,提供了Set接口的骨架实现。
HashSet

13、HashSet和HashMap的区别与相同

HashMapHashSet
实现了Map接口实现Set接口
存储键值对仅存储对象
调用put()向map中添加元素调用add()方法向Set中添加元素
HashMap使用键(Key)计算HashcodeHashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同(因此使用前要确保重写hashCode()方法和equals()方法)
HashMap较快,因为它是使用唯一的键获取对象HashSet较慢
非线程安全非线程安全
LinkedHashSet
TreeSet

AbstractQueue

14、AbstractQueue抽象类的作用

  1. 继承AbstractCollection
PriorityQueue

ArrayDeque

Collections(2)

SynchronizedList

10、SynchronizedList的特点

  1. 线程安全
  2. 通过Collections.synchronizedList(new ArrayList<>())-参数传入任何List就会返回SynchronizedList,使得该List是线程安全的。

SynchronizedMap

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值