
1、List:
- ArrayList: Object[] 数组
- LinkedList: 双向链表
2、Set
- HashSet:基于 HashMap 实现
- LinkedHashSet: 是 HashSet 的子类,内部通过 LinkedHashMap 实现。
- TreeSet:有序,唯一,红黑树(自平衡的排序二叉树)
3、Queue
- PriorityQueue: Object[] 数组来实现二叉堆
- ArrayQueue: Object[] 数组 + 双指针
1、HashMap
- 底层由数组和链表或红黑树组成。
- 当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。
- 如果当前数组的长度小于 64,那么会选择先进行数组扩容
2、LinkedHashMap
- LinkedHashMap 继承自 HashMap,底层由数组和链表或红黑树组成。
- 增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。
3、Hashtable
- 数组+链表组成的,数组是 Hashtable 的主体,链表则是主要为了解决哈希冲突而存在
4、TreeMap
- 红黑树(自平衡的排序二叉树)
1、ArrayList
- 数组实现,可以随机访问,查找快。
- 物理连续性,增删中间元素需移动后续元素。
指定 index 添加数据,就需要拷贝 index 后面的数据后移一位。- 动态数组,初始化时是一个空数组,在第一次 add 时设置初始容量为 10,每次扩容都增加到原来的 1.5 倍。
2、LinkedList
- 链表实现,查找元素需从头访问。
- 增删快。
3、Vector
- 数组实现
- 弃用,线程安全,但是太多synchronized,效率低
4、ArrayList和Vector区别
- Vector线程安全
- 扩容机制,ArrayList增量右移一位即/2,新容量是原容量1.5倍。Vector新容量是2倍。
5、Stack
- 弃用,使用ArrayDeque实现
| 功能 | 方法 | ArrayList | LinkedList |
|---|---|---|---|
| 增 | add(E e) | O(1) | O(1) |
| 删 | remove(int index) | O(n) | O(n) |
| 改 | set(int index, E e) | O(1) | O(n) |
| 查 | get(int index) | O(1) | O(n) |
1、Queue两组API,功能相同,用法区别:
| 功能 | 抛异常 | 返回值 |
|---|---|---|
| 增 | add(E e) | offer(e) |
| 删 | remove() | poll() |
| 查 | element() | peek() |
2、 Deque双端队列,针对两端:
| 功能 | 抛异常 | 返回值 |
|---|---|---|
| 增 | addFirst(e)/ addLast(e) | offerFirst(e)/ offerLast(e) |
| 删 | removeFirst()/ removeLast() | pollFirst()/ pollLast() |
| 查 | getFirst()/ getLast() | peekFirst()/ peekLast() |
3、实现类:LinkedList、ArrayDeque、PriorityQueue
常用API,操作集合CRUD(Create, Read, Update, and Delete):
boolean add(E e);
boolean addAll(Collection<? extends E> c);
boolean remove(Object o);
boolean removeAll(Collection<?> c);
boolean contains(Object o);
boolean containsAll(Collection<?> c);
boolean isEmpty();
int size();
Object[] toArray(); // 集合转数组
Collections.sort(arrayList, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
});
public class Person implements Comparable<Person> {
@Override
public int compareTo(Person o) {
if (this.age > o.getAge()) {
return 1;
}
if (this.age < o.getAge()) {
return -1;
}
return 0;
}
}
参考
https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453144514&idx=2&sn=3b14fa92bd3d129d5c60a2eea0c5869f&scene=21#