java学习--Collection

一、Collection 是什么?

Collection 是 Java 集合框架的根接口 (位于 java.util 包下),它定义了一组用于操作 "一组对象"(元素)的通用方法,是所有单列集合(区别于 Map 这种键值对集合)的基础。

你可以把 Collection 理解为一个 "容器" 的通用规则:比如怎么添加元素、删除元素、判断是否包含某个元素等,而具体的容器(如列表、集合、队列)会遵循这个规则,并实现自己的特性。

二、Collection 的核心方法(通用规则)

这些方法是所有实现了 Collection 接口的类都具备的,常用的有:

方法 作用
boolean add(E e) 向集合中添加一个元素
boolean remove(Object o) 从集合中移除指定元素
boolean contains(Object o) 判断集合是否包含指定元素
int size() 返回集合中元素的个数
void clear() 清空集合中所有元素
boolean isEmpty() 判断集合是否为空
Iterator<E> iterator() 获取遍历集合的迭代器
Object[] toArray() 将集合转为数组

三、Collection 的主要子接口(常用实现类)

Collection 本身是接口,不能直接实例化,实际开发中我们使用的是它的子接口和实现类,核心子接口有 3 个:

1. List(有序、可重复)
  • 特点:元素有序 (插入顺序 = 遍历顺序)、可重复,支持通过索引访问元素。
  • 常用实现类:
    • ArrayList:底层是数组,查询快、增删慢,线程不安全(日常开发最常用)。
    • LinkedList:底层是双向链表,查询慢、增删快,线程不安全。
    • Vector:底层是数组,线程安全,但效率低(基本被淘汰)。
2. Set(无序、不可重复)
  • 特点:元素无序 (无索引)、不可重复 (依赖 equals()hashCode() 保证)。
  • 常用实现类:
    • HashSet:底层是哈希表,存取快,无序,不可重复。
    • LinkedHashSet:继承 HashSet,底层加了链表,保证元素有序(插入顺序)。
    • TreeSet:底层是红黑树,元素会自动排序(需实现 Comparable 或传入 Comparator)。
3. Queue(队列,先进先出)
  • 特点:遵循 "先进先出(FIFO)" 原则,常用于任务排队、消息处理等场景。
  • 常用实现类:
    • LinkedList:同时实现了 ListQueue,可作为队列使用。
    • PriorityQueue:优先级队列,元素按优先级排序(而非插入顺序)。

四、Collection 的基本使用示例

下面是一个简单的示例,展示 Collection 核心方法的使用(以 ArrayList 为例):

复制代码
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionDemo {
    public static void main(String[] args) {
        // 1. 创建 Collection 实现类对象(ArrayList)
        Collection<String> collection = new ArrayList<>();

        // 2. 添加元素
        collection.add("Java");
        collection.add("Python");
        collection.add("C++");
        System.out.println("添加元素后:" + collection); // 输出:[Java, Python, C++]

        // 3. 判断元素是否存在
        boolean hasJava = collection.contains("Java");
        System.out.println("是否包含 Java:" + hasJava); // 输出:true

        // 4. 获取元素个数
        int size = collection.size();
        System.out.println("集合大小:" + size); // 输出:3

        // 5. 遍历集合(方式1:迭代器)
        Iterator<String> iterator = collection.iterator();
        System.out.print("迭代器遍历:");
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.print(element + " "); // 输出:Java Python C++
        }
        System.out.println();

        // 6. 移除元素
        collection.remove("C++");
        System.out.println("移除 C++ 后:" + collection); // 输出:[Java, Python]

        // 7. 判断是否为空
        boolean isEmpty = collection.isEmpty();
        System.out.println("集合是否为空:" + isEmpty); // 输出:false

        // 8. 清空集合
        collection.clear();
        System.out.println("清空后:" + collection); // 输出:[]
    }
}

五、关键注意点

  1. Collection泛型接口 ,使用时建议指定元素类型(如 Collection<String>),避免类型转换异常。
  2. Set 保证元素唯一的原理:添加元素时,先调用 hashCode() 计算哈希值,再调用 equals() 比较,两者都相同则视为重复元素,无法添加。
  3. 遍历 Collection 的方式:除了迭代器,还可以用增强 for 循环(for (String s : collection))或 Java 8+ 的流式遍历(collection.forEach(System.out::println))。

总结

  1. Collection 是 Java 单列集合的根接口,定义了操作元素的通用方法,不能直接实例化。
  2. 核心子接口:List(有序可重复)、Set(无序不可重复)、Queue(先进先出),各有不同的实现类适配不同场景。
  3. 常用操作:添加(add)、删除(remove)、遍历(迭代器 / 增强 for)是 Collection 最核心的使用场景,不同实现类仅在性能、有序性、唯一性上有差异。
相关推荐
yyyyy_abc1 小时前
ceph学习笔记
笔记·ceph·学习
晓梦林1 小时前
ximai靶场学习笔记
android·笔记·学习
nashane2 小时前
HarmonyOS 6学习:外接键盘CapsLock与长截图功能的实战调试与完整解决方案
学习·华为·计算机外设·harmonyos
kkeeper~2 小时前
0基础C语言积跬步之深入理解指针(5下)
c语言·开发语言
一直不明飞行2 小时前
Java的equals(),hashCode()应该在什么时候重写
java·开发语言·jvm
REDcker2 小时前
有限状态机与状态模式详解 FSM建模Java状态模式与C++表驱动模板实践
java·c++·状态模式
盲敲代码的阿豪2 小时前
Python 入门基础教程(爬虫前置版)
开发语言·爬虫·python
一口吃俩胖子2 小时前
【脉宽调制DCDC功率变换学习笔记021】时域性能准则
笔记·学习
你的保护色3 小时前
【无标题】
java·服务器·网络
basketball6163 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++