前言
数组是 Java 基础容器,但存在长度固定、增删元素操作繁琐、缺少封装好的工具方法等短板。集合框架是 JDK 提供的可变长度容器工具,专门用来批量存储引用类型数据,日常开发、业务逻辑、算法场景使用频率极高。本章将完整拆解集合全套知识点,分为四篇博客更新,本篇为第一部分,讲解集合整体树形架构、单列集合根接口Collection。
一、Java 集合两大核心分支
Java 集合分为单列集合 Collection 、双列集合 Map两大完全独立分支,顶层接口互相无继承关系,存储逻辑完全区分:
- 单列集合
Collection:单次只能存入单个元素; - 双列集合
Map:单次存入一组键值对(key-value),key 唯一,value 允许重复。
1.1 单列集合 Collection 细分体系
Collection是所有单列集合的顶层父接口,衍生两大子接口:
- List 接口:存取有序、自带数字索引、允许存储重复元素常用实现类:
ArrayList、LinkedList - Set 接口:存取无序、无索引、不允许存储重复元素常用实现类:
HashSet、LinkedHashSet、TreeSet
1.2 双列集合 Map 细分体系
Map 独立分支,不实现 Collection 接口,用于存储映射关系:常用实现类:HashMap、LinkedHashMap、TreeMap
1.3 代码直观区分两种容器
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class CollectionDemo {
public static void main(String[] args) {
// 单列集合:一次添加单个元素
Collection<String> coll = new ArrayList<>();
coll.add("橘子");
coll.add("草莓");
coll.add("芒果");
// 双列集合:一次添加一对键值
Map<String, Integer> fruitMap = new HashMap<>();
fruitMap.put("橘子", 8);
fruitMap.put("草莓", 12);
fruitMap.put("芒果", 15);
}
}
二、Collection 顶层接口通用核心方法
所有 Collection 实现类(ArrayList、HashSet、LinkedHashSet 等)都会继承以下统一增删查改 API,是单列集合通用操作标准:
| 方法签名 | 功能说明 |
|---|---|
boolean add(E e) |
向集合添加元素,List 永远返回 true,Set 添加重复元素返回 false |
void clear() |
清空集合内部全部存储元素 |
boolean remove(Object o) |
删除集合中第一个匹配的指定元素 |
boolean contains(Object o) |
判断集合是否包含目标元素 |
boolean isEmpty() |
判断集合当前是否为空(无元素) |
int size() |
获取集合当前存储元素总个数 |
代码演示 Collection 基础操作
import java.util.ArrayList;
import java.util.Collection;
public class CollectionMethodDemo {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
// 1. add 添加元素
coll.add("张三");
coll.add("李四");
coll.add("王五");
System.out.println("添加后集合:" + coll);
// 2. size 获取长度
System.out.println("集合元素个数:" + coll.size());
// 3. contains 判断是否包含元素
System.out.println("是否包含李四:" + coll.contains("李四"));
// 4. remove 删除元素
coll.remove("王五");
System.out.println("删除王五后:" + coll);
// 5. isEmpty 判断是否为空
System.out.println("集合是否为空:" + coll.isEmpty());
// 6. clear 清空集合
coll.clear();
System.out.println("清空后集合:" + coll);
System.out.println("清空后是否为空:" + coll.isEmpty());
}
}
三、底层关键特性说明
contains()、remove()两个方法底层比对元素时,会自动调用元素对象的equals()方法;- 如果存入集合的是自定义实体类,想要按照对象属性判断相等,必须重写
equals()方法;若不重写,会使用 Object 原生地址对比,导致删除、判断包含功能失效; add()方法对于 List 实现类固定返回 true;Set 实现类添加重复元素时返回 false,代表添加失败。
四、本篇小结
- Java 集合分为单列 Collection、双列 Map 两大独立体系,存储格式完全不同;
- Collection 是所有单列集合的根接口,统一定义了增删查改基础 API,全部单列集合通用;
- List 特点:有序、有索引、可存重复;Set 特点:无序、无索引、不可存重复;
- 涉及元素比对的
remove、contains依赖equals,自定义实体类必须重写该方法。