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 最核心的使用场景,不同实现类仅在性能、有序性、唯一性上有差异。
相关推荐
兩尛5 小时前
c++知识点2
开发语言·c++
fengfuyao9855 小时前
海浪PM谱及波形的Matlab仿真实现
开发语言·matlab
xiaoye-duck6 小时前
C++ string 底层原理深度解析 + 模拟实现(下)——面试 / 开发都适用
开发语言·c++·stl
微露清风6 小时前
系统性学习Linux-第二讲-基础开发工具
linux·运维·学习
阳光九叶草LXGZXJ7 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
Hx_Ma167 小时前
SpringMVC框架提供的转发和重定向
java·开发语言·servlet
biuyyyxxx7 小时前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化
期待のcode7 小时前
原子操作类LongAdder
java·开发语言
舟舟亢亢8 小时前
Java集合笔记总结
java·笔记
小酒窝.8 小时前
【多线程】多线程打印ABC
java