Java 集合高级(一)集合整体架构与 Collection 顶层接口

前言

数组是 Java 基础容器,但存在长度固定、增删元素操作繁琐、缺少封装好的工具方法等短板。集合框架是 JDK 提供的可变长度容器工具,专门用来批量存储引用类型数据,日常开发、业务逻辑、算法场景使用频率极高。本章将完整拆解集合全套知识点,分为四篇博客更新,本篇为第一部分,讲解集合整体树形架构、单列集合根接口Collection

一、Java 集合两大核心分支

Java 集合分为单列集合 Collection双列集合 Map两大完全独立分支,顶层接口互相无继承关系,存储逻辑完全区分:

  1. 单列集合Collection:单次只能存入单个元素
  2. 双列集合Map:单次存入一组键值对(key-value),key 唯一,value 允许重复。

1.1 单列集合 Collection 细分体系

Collection是所有单列集合的顶层父接口,衍生两大子接口:

  1. List 接口:存取有序、自带数字索引、允许存储重复元素常用实现类:ArrayListLinkedList
  2. Set 接口:存取无序、无索引、不允许存储重复元素常用实现类:HashSetLinkedHashSetTreeSet

1.2 双列集合 Map 细分体系

Map 独立分支,不实现 Collection 接口,用于存储映射关系:常用实现类:HashMapLinkedHashMapTreeMap

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());
    }
}

三、底层关键特性说明

  1. contains()remove() 两个方法底层比对元素时,会自动调用元素对象的equals()方法;
  2. 如果存入集合的是自定义实体类,想要按照对象属性判断相等,必须重写equals()方法;若不重写,会使用 Object 原生地址对比,导致删除、判断包含功能失效;
  3. add()方法对于 List 实现类固定返回 true;Set 实现类添加重复元素时返回 false,代表添加失败。

四、本篇小结

  1. Java 集合分为单列 Collection、双列 Map 两大独立体系,存储格式完全不同;
  2. Collection 是所有单列集合的根接口,统一定义了增删查改基础 API,全部单列集合通用;
  3. List 特点:有序、有索引、可存重复;Set 特点:无序、无索引、不可存重复;
  4. 涉及元素比对的removecontains依赖equals,自定义实体类必须重写该方法。