集合进阶(Collections Set List)

一、集合体系总览

Java 集合根接口:Collection(单列集合,存一个个对象)两大分支:

  1. List:有序、可重复、有索引
  2. Set:无序、不重复、无索引

工具类:Collections:操作集合的静态工具方法


二、Collection 集合

1. 特点

  • 所有单列集合的根接口
  • 定义了所有单列集合共有的方法
  • 不能直接创建对象,只能使用实现类(ArrayList、HashSet 等)

2. 常用方法(所有 List/Set 都能用)

复制代码
// 添加元素
collection.add("张三");

// 清空集合
collection.clear();

// 删除指定元素
collection.remove("张三");

// 判断是否包含某个元素
collection.contains("张三");

// 判断是否为空
collection.isEmpty();

// 获取集合大小
collection.size();

// 转成数组
collection.toArray();

3. Collection 遍历方式(3 种)

  1. 迭代器遍历(通用)

    Iterator it = list.iterator();
    while(it.hasNext()){
    String s = it.next();
    }

  2. 增强 for 循环(最常用)

    for(String s : collection){
    System.out.println(s);
    }

  3. forEach 方法(Lambda)

    collection.forEach(s -> System.out.println(s));


三、List 集合(有序、可重复、有索引)

1. 特点

  • 存取有序
  • 元素可重复
  • 有索引,可以通过索引操作

2. 常用实现类

  1. ArrayList:底层数组,查询快、增删慢
  2. LinkedList:底层链表,查询慢、增删快(可做队列、栈)

3. List 特有方法(带索引)

复制代码
// 在指定索引插入元素
list.add(2, "李四");

// 根据索引删除
list.remove(2);

// 修改指定索引元素
list.set(1, "王五");

// 根据索引获取元素
list.get(0);

4. List 遍历方式(4 种)

  1. 普通 for 循环(利用索引)
  2. 迭代器
  3. 增强 for
  4. Lambda forEach

四、Set 集合(无序、不重复、无索引)

1. 特点

  • 存取无序
  • 元素唯一,不能重复
  • 没有索引,不能用普通 for 遍历

2. 常用实现类

  1. HashSet:最常用,底层哈希表,无序、不重复
  2. LinkedHashSet :底层哈希表 + 链表,有序、不重复
  3. TreeSet :底层红黑树,可排序、不重复

3. HashSet 去重原理(面试高频)

  1. 先调用 hashCode() 计算哈希值
  2. 哈希值相同,再调用 equals() 比较内容
  3. 都相同 → 判定重复,不存入

注意 :自定义对象要存在 HashSet 中,必须重写 hashCode () 和 equals ()

4. TreeSet 排序规则

  • 对元素自动排序
  • 两种排序方式:
    1. 自然排序 :元素类实现 Comparable 接口
    2. 比较器排序 :创建集合时传入 Comparator

五、Collections 工具类

1. 作用

专门用来操作 Collection 集合的静态工具类

2. 常用方法

复制代码
// 批量添加多个元素
Collections.addAll(list, "a", "b", "c");

// 打乱顺序(只对 List 有效)
Collections.shuffle(list);

// 排序(默认升序)
Collections.sort(list);

// 自定义排序(比较器)
Collections.sort(list, (o1, o2) -> o2 - o1);

// 获取最大值
Collections.max(list);

// 获取最小值
Collections.min(list);

// 反转集合
Collections.reverse(list);

六、面试题题总结

  1. List 和 Set 的区别
    • List:有序、可重复、有索引
    • Set:无序、不重复、无索引
  2. ArrayList 和 LinkedList 区别
    • ArrayList:数组,查询快
    • LinkedList:链表,增删快
  3. HashSet 如何保证去重
    • hashCode() + equals()
  4. Collections 和 Collection 的区别
    • Collection:根接口
    • Collections:操作集合的工具类

总结

  1. Collection:单列集合根接口,定义通用方法
  2. List:有序、可重复、有索引(ArrayList/LinkedList)
  3. Set:无序、不重复、无索引(HashSet/LinkedHashSet/TreeSet)
  4. Collections:集合工具类,提供排序、打乱、批量添加等静态方法
相关推荐
明志数科17 分钟前
4D时序标注技术详解:让机器人理解连续动作的数据基础
java·算法·机器人
_qingche23 分钟前
H2 数据库到 MySQL 数据迁移
java·数据库·spring boot·mysql·spring·重构·kotlin
可乐ea1 小时前
【知识获取与分享社区项目 | 项目日记第 21 天】索引构建与联想建议:Outbox 增量更新 + Completion Suggester
java·大数据·mysql·elasticsearch·搜索引擎
RainCity1 小时前
Java Swing 自定义组件库分享(十一)
java·笔记·后端
好家伙VCC1 小时前
Qdrant + LangChain 实战:构建毫秒级语义检索服务
java·langchain
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第93题】【Mysql篇】第23题:从查找速度来看,聚集索引和非聚集索引哪个更快?
java·开发语言·数据库·mysql·面试
摇滚侠1 小时前
JDBC 基础到高级一套通关!高级篇 28-40
java
Smoothcloud润云2 小时前
5大功能精修,重构AI算力使用体验!
java·人工智能·windows·算法·重构·编辑器·sublime text
我是唐青枫2 小时前
Java MyBatis-Flex 实战指南:从 BaseMapper 到 QueryWrapper 的轻量 ORM 用法
java·开发语言·mybatis
顺风尿一寸2 小时前
Java Native 方法底层原理深度解析:从 JNI 注册到 Native Wrapper 生成
java