JAVA集合框架详解
1 顶层接口和抽象类
接口
- 概念:抽象方法的集合,以interface声明。接口无法被实例化,但可以被实现(
implements
)。一个类可以实现多个接口。
抽象类
- 概念:抽象类不能实例化对象,必须被继承(
extends
)才能被使用(非抽象子类才能被实例化),一个类只能继承一个抽象类。使用abstract class定义抽象类。 - 抽象类中包含成员变量、成员方法和构造方法。
-
- 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
-
- 抽象类中的抽象方法只是声明,不包含方法体(方法的具体实现也就是方法的具体功能),抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
接口 & 抽象类
特性 | 接口(Interface)(包含类要实现的方法) | 抽象类(Abstract Class)(描述对象的属性和方法) |
---|---|---|
关键字 | interface | abstract class |
继承关系 | 类可以实现多个接口 | 类只能继承一个抽象类 |
方法类型 | 主要是抽象方法,Java 8+有默认方法 | 可以有抽象方法和具体方法 |
成员变量 | 只能是常量(public static final) | 可以是普通成员变量 |
构造方法 | 不能有构造方法 | 可以有构造方法 |
访问修饰符 | 默认public | 各种访问修饰符都可以 |
设计目的 | 定义行为契约 | 提供代码复用和模板 |
1.1 Iterator 接口
- 提供遍历集合的标准方式
- 主要方法:hasNext(), next(), remove()
1.2 Collection 接口
- 所有单列集合的根接口
- 定义了对集合的基本操作,添加、删除、遍历等
1.3 Map 接口
- 键值对集合的根接口
2 Collection的三个主要子接口
2.1 List接口
- 有序集合,允许重复元素
- 主要实现类:
ArrayList:基于动态数组,随机访问快
LinkedList:基于双向链表,插入删除快
Stack:后进先出(LIFO)结构
2.2 Set 接口
- 无序集合,不允许重复元素
- 主要实现类:
HashSet:基于哈希表,快速查找
TreeSet:基于红黑树,元素有序
LinkedHashSet:保持插入顺序的HashSet
2.3 Queue 接口
- 队列,先进先出(FIFO)结构
- 主要实现类:LinkedList也实现了Queue接口
3. Map 接口的主要实现类
HashMap
基于哈希表的Map实现
键值对无序,允许null键和null值
LinkedHashMap
保持插入顺序或访问顺序的HashMap
TreeMap
基于红黑树的Map实现
键按照自然顺序或Comparator排序
WeakHashMap
弱引用Map,当键不再被引用时会被垃圾回收
4. 抽象类和工具类
抽象类
AbstractCollection:Collection接口的骨架实现
AbstractList:List接口的骨架实现
AbstractSet:Set接口的骨架实现
AbstractMap:Map接口的骨架实现
AbstractSequentialList:顺序访问列表的骨架实现
工具类
Collections:集合工具类,提供排序、查找、同步化等方法
Arrays:数组工具类,提供数组操作的各种方法
5. 排序相关接口
Comparable 接口
自然排序接口,对象实现此接口定义自然顺序
Comparator 接口
比较器接口,用于定义定制排序规则
6. 重要关系说明
// 继承关系示例
ArrayList → AbstractList → AbstractCollection → Collection
HashSet → AbstractSet → AbstractCollection → Collection
HashMap → AbstractMap → Map// 实现关系示例
ArrayList implements List
HashSet implements Set
HashMap implements Map
7. 使用场景总结
Java数据结构java.util.*
: Arrays, Lists, Sets, Maps, Stack, Queue, Heap, Trees, Graphs
集合类型 | 特点 | 适用场景 |
---|---|---|
ArrayList | 动态数组,随机访问快 | 需要频繁按索引访问 |
LinkedList | 双向链表,插入删除快 | 需要频繁在头尾操作 |
HashSet | 哈希表,快速查找 | 需要快速判断元素是否存在 |
TreeSet | 红黑树,元素有序 | 需要有序且去重的集合 |
HashMap | 键值对,快速查找 | 需要通过键快速查找值 |
TreeMap | 键有序的Map | 需要按键排序的映射 |