集合进阶(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:集合工具类,提供排序、打乱、批量添加等静态方法
相关推荐
信誓旦旦的程序猿1 分钟前
【零依赖量化数据实战 #25】北交所技术指标与基本面
java·人工智能·python·股票数据api·股票数据·股票数据api接口·股票api数据接口
万年咸鱼5 分钟前
Java ArrayList 详解:原理、用法与实战
java·开发语言·windows
CoderYanger28 分钟前
A.每日一题:3345. 最小可整除数位乘积 I
java·数据结构·程序人生·算法·leetcode·面试·学习方法
小刘是地理大王33 分钟前
OpenFeign 兜底回调(fallback / fallbackFactory)实战指南
java·后端
橘子汽水16837 分钟前
Leetcode15:三数之和
java·数据结构·算法
Nolla38 分钟前
为什么 assertThrows 需要 () ->:Lambda 延迟执行与异常捕获
java
SL_staff41 分钟前
风控规则不该写代码:一个开发者视角的规则引擎实践拆解
java·架构·全栈
xieliyu.1 小时前
计算机网络|数据链路层详解:MAC 地址、交换机、ARP 协议、CRC 校验
java·网络·笔记·计算机网络·java-ee
SimonKing1 小时前
手机投屏到电脑,不用装任何 App,这个开源工具免费搞定:QtScrcpy
java·后端·程序员