集合
一、集合框架图(图片来源于网络)
这是两个集合框架接口的总体图分为两个集合接口,分别是Collection接口和map接口
二、collection集合接口
下面的接口主要有:List、Set、Queue;
(1)Queue接口与List、Set同一级别,都是继承了Collection接口。
(2)LinkedList既可以实现List接口也可以实现Queue接口。只不过LinkedList实现Queue接口时,Queue接口窄化了对LinkedList的访问权限(参数类型是Queue时只能访问Queue中的方法,不能访问LinkedList的非Queue的方法)。
(3)SortedSet是个接口,它里面(只有TreeSet这一实现可用)的元素一定是有序的。
1、List
(1)ArrayList
优点:底层数据结构是数组,查询快;效率高
缺点:增删慢;线程不安全
为什么是线程不安全的?
ArrayList的底层源码显示其主要做了两个步骤
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
a.判断elementData数组容量是否满足需求
b.在elementData对应位置上设置值
具体情况参考博客https://blog.csdn.net/u012859681/article/details/78206494
(2)Vector
优点:底层数据结构是数组,查询快;线程安全
缺点:增删慢;效率低
为什么是线程安全的?
由底层中的构造方法及其增删改查的操作发现会有synchronized关键字,会为Vector提供安全机制,保证了线程安全。
(3)LinkedList
优点:底层数据结构是链表,增删快;效率高
缺点:查询慢;线程不安全
原理参考博客:https://baijiahao.baidu.com/s?id=1598633392064956200&wfr=spider&for=pc
线程安全问题待定。。。。。。
2、Set
(1)HashSet
底层数据结构是哈希表(无序,唯一)
保证元素唯一性两个方法:hashCode()和equals()