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 最核心的使用场景,不同实现类仅在性能、有序性、唯一性上有差异。
相关推荐
lly2024061 小时前
Bootstrap 警告框
开发语言
2601_949146531 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
曹牧2 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
KYGALYX2 小时前
服务异步通信
开发语言·后端·微服务·ruby
zmzb01032 小时前
C++课后习题训练记录Day98
开发语言·c++
执笔论英雄2 小时前
【大模型学习cuda】入们第一个例子-向量和
学习
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
爬山算法2 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty7252 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎3 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven