Iterable接口:
所有集合类的根接口,定义了用于迭代的 iterator()
方法,支持 for-each 语法。
public interface Iterable<T> {
Iterator<T> iterator();
}
Collection 接口
继承自 Iterable,是所有集合的顶级接口,定义了集合常用的操作方法,如 add()
, remove()
, size()
等。
public interface Collection<E> extends Iterable<E> {
boolean add(E e);
boolean remove(Object o);
int size();
// 其它方法……
}
List 接口
-
特点:有序集合,允许元素重复,可以通过索引访问元素。
-
常见实现:
-
ArrayList:基于动态数组,随机访问快,插入删除可能较慢。
-
LinkedList:基于双向链表,适合频繁插入和删除操作,同时也实现了 Queue 接口,可以作为队列使用。
-
Set 接口
-
特点:不允许重复元素,无序存储(部分实现有排序需求)。
-
子接口:
-
SortedSet:要求集合中的元素按照一定顺序排列。
-
NavigableSet:在 SortedSet 的基础上提供导航方法,如
lower()
,floor()
,ceiling()
等。
-
-
常见实现:
-
HashSet:基于哈希表实现,元素无序;
-
LinkedHashSet:在 HashSet 的基础上维护插入顺序;
-
TreeSet:基于红黑树实现,能够对元素进行排序。
-
Queue 接口
-
特点:通常用来表示队列结构,遵循先进先出(FIFO)的原则。
-
子接口:
-
Deque(双端队列):支持从两端插入和删除。
-
-
常见实现:
-
ArrayDeque:基于数组实现的双端队列;
-
LinkedList:既可作为 List 也可作为 Queue 使用。
-
Map 接口
-
特点:保存键值对(Key-Value)的映射关系,但不属于 Collection 层次结构。
-
子接口:
-
SortedMap:键值对按照键的自然顺序或指定顺序排序。
-
NavigableMap:在 SortedMap 的基础上提供导航方法,如
lowerEntry()
,higherEntry()
等。
-
-
常见实现:
-
HashMap:基于哈希表实现,操作时间复杂度平均为 O(1);
-
LinkedHashMap:在 HashMap 的基础上维护元素的插入顺序;
-
TreeMap:基于红黑树实现,支持排序;
-
Hashtable:线程安全的哈希表,但一般不推荐使用,现多用 ConcurrentHashMap 替代。
-
抽象类在集合框架中的作用
为了减少实现类的开发工作,Java 提供了一些抽象类作为骨架实现:
-
AbstractCollection:实现了 Collection 接口的大部分方法,简化了子类的开发。
-
AbstractList:继承自 AbstractCollection,实现了 List 接口,常用来开发自定义列表。
-
AbstractSet:继承自 AbstractCollection,实现了 Set 接口,适用于自定义集合。
-
AbstractMap:实现了 Map 接口的大部分方法,子类只需实现少量方法即可。
这些抽象类为实现者提供了默认的行为,使得定制集合时只需关注特殊逻辑,而不用从零开始实现所有接口方法。
-
继承体系清晰:所有集合都继承自 Iterable(通过 Collection),而 Map 则独立于 Collection 之外,但同样拥有明确的接口层次。
-
接口与抽象类配合:接口定义行为规范,而抽象类提供默认实现,减少了重复代码。
-
多样性实现:List、Set、Queue 和 Map 的多种实现类可以根据不同需求选用,比如 ArrayList 与 LinkedList 在不同场景下的效率差异,以及 HashSet 和 TreeSet 在元素排序上的不同表现。