一、集合总览
 
 存储特性:仅能存储引用类型对象,所有集合工具类均位于  java.util  包下。

 两大分支:Collection单列集合(存储单个元素)、Map双列集合(存储键值对)。
 
Collection三大子接口特性
 
List:元素有序、带下标、允许重复。

 Set:元素无序、无下标、不允许重复。

 Queue:队列结构,遵循先进先出(FIFO) 规则。
 
二、List 接口三大实现类
 
1. ArrayList
 
 底层结构:动态数组,初始容量10,满容量后扩容1.5倍。

 性能特点:查询、遍历速度极快;数组中间位置增删元素效率低。

线程特性:线程不安全,单线程开发首选集合。
 
2. LinkedList
 
 底层结构:双向链表,无固定容量、无扩容机制。

性能特点:首尾增删元素效率极高;根据下标随机查询速度慢。
 
3. Vector
 
 老旧集合(JDK1.0),所有方法添加 synchronized 锁保证线程安全。

运行效率极低,目前业务开发基本淘汰。
 
面试重点:ArrayList vs LinkedList
 
1. 遍历、随机获取元素场景:ArrayList性能完胜。

2. 频繁首尾插入、删除元素场景:LinkedList更优。

3. 日常业务90%场景:优先使用ArrayList。
 
三、Set 接口实现类
 
1. HashSet(核心重点)
 
特性:元素无序、不可重复,底层基于HashMap实现。

自定义对象去重规则:必须同时重写 hashCode() 和 equals() 方法。
 
底层去重执行逻辑
 
1. 先对比两个对象的hashCode值,值不同则直接判定为不同对象。

2. hashCode值相同时,再调用equals()方法对比内容,内容不同才判定为新对象。
 
2. TreeSet
 
- 特性:集合元素自动排序。

- 自定义类存入要求:必须实现  Comparable  接口,重写  compareTo()  方法。

- 去重规则:compareTo方法返回0时,判定元素重复,无法存入集合。
 
3. LinkedHashSet
 
 继承自HashSet,底层维护双向链表。

同时具备两大特性:保留元素插入顺序 + 保证元素不重复。
 
四、Map 键值对集合
 
1. 核心特点
 
 Key键:唯一不可重复。

Value值:允许重复、可为空。

 整体无序,无下标索引。
 
2. 主流实现类特性
 
HashMap:线程不安全,key、value均可为null,底层数组+链表+红黑树,读写效率最高,日常开发首选。

Hashtable:线程安全,key、value禁止为null,全量加锁,性能极差,已过时。

LinkedHashMap:继承HashMap,线程不安全,保留键值对插入顺序。

TreeMap:线程不安全,key禁止为null,底层红黑树,可根据key自动排序。

3. Map三种遍历方式(开发高频)

// 方式1:keySet 单独遍历键<String> keys = map.keySet();
for(String k : keys){
    System.out.println(k+"="+map.get(k));
}

// 方式2:values 单独遍历值<String> values = map.values();

// 方式3:entrySet 键值对遍历(效率最高,开发首选)
<String,String>> entrys = map.entrySet();
for(Map.Entry<String,String> en : entrys){
    en.getKey();
    en.getValue();
}

五、集合工具类 Collections
 
- 概念区分:Collection是单列集合根接口,Collections是操作集合的静态工具类。
 
常用静态方法
 
- sort(List):对集合元素排序,自定义实体需实现Comparable接口。

- reverse(List):反转集合元素顺序。

- shuffle(List):随机打乱集合元素顺序。

- synchronizedList/Set/Map:将非线程安全集合转为线程安全集合。
 
六、两种比较器(排序核心)
 
1. 内置比较器 Comparable
 
- 定义位置:写在实体类内部。

- 使用方式:实现接口,重写compareTo方法,对比当前对象与传入对象。

- 特点:排序规则永久绑定实体类,仅支持一套固定规则。
 
2. 外置比较器 Comparator
 
- 定义位置:无需修改实体类,临时定义排序规则。

- 特点:灵活适配多套排序规则,优先级高于内置比较器。

外置比较器代码示例

Collections.sort(list, new<Worker>(){
    public int compare(Worker w1, Worker w2) {
        // 按年龄升序排序
        return w1.getAge()-w2.getAge();
    }
});

七、泛型
 
- 核心作用:编译期约束集合存储类型,提前拦截类型转换异常,提升代码安全性。

- 常用泛型标识:T(任意类型)、K(键)、V(值)、E(集合元素)。

- 强制限制:八种基本数据类型不能作为泛型,必须使用对应包装类。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐