集合进阶(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:集合工具类,提供排序、打乱、批量添加等静态方法
相关推荐
阿狗童鞋8 分钟前
SpringSecurity权限认证实战指南
java·后端·spring
Wang's Blog12 分钟前
Java 项目部署之 Docker工具快速入门: 学习路径与命令速查导引
java·学习·docker
Wang's Blog34 分钟前
Java 项目部署之 Docker工具快速入门: Docker 镜像仓库
java·docker
企智汇-项目管理软件42 分钟前
离散制造管理系统怎么选?一套系统管住从研发到交付的全周期
java·人工智能·制造·项目经理·项目管理软件·项目管理系统·项目管理软件工程
IT研究室1 小时前
最新计算机毕业设计选题推荐-基于spring boot的幼儿园管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
会编程的吕洞宾1 小时前
Spring Cloud Gateway限流实战 Redis令牌桶算法+熔断降级
java·后端·spring
Wang's Blog1 小时前
Java 项目部署之 Docker工具快速入门: DockerCompose 部署微服务集群
java·docker·微服务
BullSmall1 小时前
SonarQube 9.9.8-community 适配 Jenkins 版本说明
java·前端·jenkins
威哥爱编程1 小时前
【AI全栈12-10】Spring Boot 用多模态做商品图审核 / 发票识别
java·spring boot·后端
轮子大叔2 小时前
Java8和Java17常见区别
java