集合进阶(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:集合工具类,提供排序、打乱、批量添加等静态方法
相关推荐
SL_staff9 小时前
JVS数字底座实践:如何复用企业文档能力快速构建知识类应用
java·数据库·程序员
sugar__salt9 小时前
MyBatis ③动态 SQL 完全指南 —— 从条件拼接到批量操作
java·sql·mybatis
吃饱了得干活9 小时前
Java并发安全:看这一篇就懂了!
java·后端·面试
前端双越老师9 小时前
前端学习 Java 其实很容易:TS 和 Java 语法的 N 个相同点
java·全栈
evans在进步10 小时前
LeetCode 17:电话号码的字母组合——Java DFS 回溯法详解
java·leetcode·深度优先
2401_8504811710 小时前
UVA10391
java
UQR10 小时前
一、Java基础高频面试题
java·开发语言
AC赳赳老秦10 小时前
网页公开附件自动采集:OpenClaw 批量下载页面内嵌 Word/Excel 附件,统一格式后结构化入库
java·python·word·php·excel·deepseek·openclaw
上海云盾商务经理杨杨10 小时前
Tomcat 弱配置漏洞渗透实战!批量 getshell 高频漏洞
java·web安全·tomcat
10mAh10 小时前
【Linux】error while loading shared libraries 怎么解决?——ldd、RPATH 与动态链接排错
java·linux·前端