HashMap

HashMap

一、定义

1
2
3
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
}

二、实现

2.1 数据结构

HashMap 的底层数据存储结构是“数组 + 链表 + 红黑树”,红黑树结构是 JDK8 之后进行的优化。

 Stack

Stack

一、定义

1
2
public class Stack<E> extends Vector<E> {
}

Stack 继承自 Vector 类,因此拥有 Vector 的所有特性。

二、原理

Stack 除了增加几个栈特用的方法以外,其他的和 Vector 都一样,而增加的这几个方法,内部实际上也是调用的 Vector 的方法。

 Vector

Vector

一、定义

1
2
3
4
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
}

定义上和 ArrayList 一样,继承同一个父类和实现相同的接口。

二、实现原理

 PriorityQueue

PriorityQueue

一、定义

1
2
3
4
5
6
7
8
9
10
11
12
13
public class PriorityQueue<E> extends AbstractQueue<E>
implements java.io.Serializable {

public PriorityQueue(int initialCapacity,
Comparator<? super E> comparator) {
// Note: This restriction of at least one is not actually needed,
// but continues for 1.5 compatibility
if (initialCapacity < 1)
throw new IllegalArgumentException();
this.queue = new Object[initialCapacity];
this.comparator = comparator;
}
}

从名称就可以看出来,这是个优先队列,也就是按照从小到大(或从大到小)排序的队列。

 Hashtable

Hashtable

一、定义

1
2
3
4
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable {
}

Hashtable 继承了旧的父类 Dictionary,和新的接口 Map

二、实现

 LinkedList

LinkedList

一、定义

1
2
3
4
5
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
}

LinkedListArrayList 的定义有一些区别,LinkedList 是继承于 AbstractSequentialList 的,而 ArrayList 是直接继承于 AbstractList

LinkedList 的继承链多了一层 AbstractSequentialList

 ArrayList

ArrayList

一、定义

1
2
3
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
...
}

有个地方没搞明白,按理说抽象类 AbstractList 已经包含了接口 List,为何还需要再次实现这个接口呢?

难道是担心抽象类 AbstractList 有可能会修改,不再实现接口 List

 ArrayDeque

ArrayDeque

一、定义

1
2
3
public class ArrayDeque<E> extends AbstractCollection<E> 
implements Deque<E>, Cloneable, Serializable {
}

ArrayDeque 实现了 Deque 接口,是一个数组实现的双向队列。

二、原理

2.1 数据结构

ArrayDeque 底层数据存储结构是数组:

 AbstractQueue

AbstractQueue

一、定义

1
2
3
4
5
public abstract class AbstractQueue<E>
extends AbstractCollection<E>
implements Queue<E> {

}

AbstractQueue 只是一个抽取类,其目的主要是为接口 Queue 的一些方法提供了基础的实现模板。

 AbstractSet

AbstractSet

一、定义

1
2
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {
}

AbstractSet 提供了接口 Set 的模板实现,也就是提供了 Set 中某些方法的实现,减少实现 Set 接口时的代码。

二、实现