文章目录

  • 前言
  • 一、Collection 接口常用方法
    • 1.boolean add(E e)
    • 2.boolean remove(Object o)
    • 3.boolean contains(Object o)
    • 4.boolean isEmpty()
    • 5.int size()
    • 6.void clear()
    • 7.Object[] toArray()
    • 8.boolean containsAll(Collection<?> c)
    • 9.boolean addAll(Collection<? extends E> c)
    • 10.boolean removeAll(Collection<?> c)
    • 11.boolean retainAll(Collection<?> c)
    • 12.Iterator<E> iterator()
    • Java 8 开始在 Collection 接口中引入
    • 13.forEach(Consumer<? super E> action)
    • 14.removeIf(Predicate<? super E> filter)
  • 二、Collection 实现接口/类拓展方法
  • 1.List 接口的其他通用方法
    • add(int index, E element)
    • remove(int index)
    • set(int index, E element)
    • get(int index)
    • forEach(Consumer<? super E> action)
    • removeIf(Predicate<? super E> filter)
  • 2.LinkedList 类的扩展方法
    • addFirst(E e)
    • addLast(E e)
    • getFirst()
    • getLast()
    • removeFirst()
    • removeLast()
  • 3.Set 集合forEach(),removeIf()方法
  • HashSet
    • forEach(Consumer<? super E> action)
    • removeIf(Predicate<? super E> filter)
  • LinkedHashSet
    • forEach(Consumer<? super E> action)
    • removeIf(Predicate<? super E> filter)
  • TreeSet
    • forEach(Consumer<? super E> action)
    • removeIf(Predicate<? super E> filter)
  • 4.Set 集合在自定义类中重写 equals() 和 hashCode() 方法保证元素不重复
  • 总结


前言

Collection 是 Java 中的一个接口,定义了所有集合类的通用操作。它是所有单一元素集合类(如 List、Set)的父接口。Collection 接口包括一些常用的方法,并且其不同的实现类(如 ArrayList、HashSet 等)可能会扩展出一些额外的方法。


一、Collection 接口常用方法

这些方法所有Collection实现类都可以使用。
ArrayList、LinkedList、HashSet、LinkedHashSet、TreeSet集合都可以调用下面的方法。
在这里插入图片描述
下面,我们以 ArrayList 为例,解释 Collection 接口中的常用方法。

1.boolean add(E e)

向 ArrayList 中添加一个元素。如果成功添加,返回 true。

ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
System.out.println(list);  // 输出:[Apple, Banana]

2.boolean remove(Object o)

从 ArrayList 中移除指定的元素。如果成功移除,返回 true。

ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.remove("Apple");  // 移除元素"Apple"
System.out.println(list);  // 输出:[Banana]

注意
对于 List 接口(如 ArrayList, LinkedList)
调用 remove(Object o) 时,只会删除第一个匹配的元素

对于 Set 接口(如 HashSet, TreeSet)
不允许重复元素,所以不会有多个相同的元素

3.boolean contains(Object o)

判断 ArrayList 中是否包含指定的元素。返回 true 如果存在,false 如果不存在。

ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
System.out.println(list.contains("Apple"));  // 输出:true
System.out.println(list.contains("Grape"));  // 输出:false

4.boolean isEmpty()

检查 ArrayList 是否为空。如果集合中没有任何元素,返回 true,否则返回 false。

ArrayList<String> list = new ArrayList<>();
System.out.println(list.isEmpty());  // 输出:true
list.add("Apple");
System.out.println(list.isEmpty());  // 输出:false

5.int size()

返回 ArrayList 中元素的数量

ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
System.out.println(list.size());  // 输出:2

6.void clear()

清空 ArrayList 中的所有元素

ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.clear();  // 清空集合
System.out.println(list);  // 输出:[]

7.Object[] toArray()

将 ArrayList 转换为一个包含所有元素的数组

ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
Object[] array = list.toArray();
for (Object obj : array) {System.out.println(obj);  // 输出:Apple  Banana
}

8.boolean containsAll(Collection<?> c)

判断 ArrayList 是否包含指定集合中的所有元素。

ArrayList<String> list1 = new ArrayList<>();
list1.add("Apple");
list1.add("Banana");ArrayList<String> list2 = new ArrayList<>();
list2.add("Apple");System.out.println(list1.containsAll(list2));  // 输出:true

9.boolean addAll(Collection<? extends E> c)

将指定集合中的所有元素添加到 ArrayList 中。

ArrayList<String> list1 = new ArrayList<>();
list1.add("Apple");
list1.add("Banana");ArrayList<String> list2 = new ArrayList<>();
list2.add("Orange");
list2.add("Grape");list1.addAll(list2);  // 添加list2中的所有元素到list1
System.out.println(list1);  // 输出:[Apple, Banana, Orange, Grape]

10.boolean removeAll(Collection<?> c)

移除 ArrayList 中与指定集合相同的所有元素。

ArrayList<String> list1 = new ArrayList<>();
list1.add("Apple");
list1.add("Banana");
list1.add("Orange");ArrayList<String> list2 = new ArrayList<>();
list2.add("Apple");
list2.add("Orange");list1.removeAll(list2);  // 移除list1中与list2相同的元素
System.out.println(list1);  // 输出:[Banana]

11.boolean retainAll(Collection<?> c)

保留 ArrayList 中仅包含指定集合中的元素,移除其他元素。

ArrayList<String> list1 = new ArrayList<>();
list1.add("Apple");
list1.add("Banana");
list1.add("Orange");ArrayList<String> list2 = new ArrayList<>();
list2.add("Apple");
list2.add("Grape");list1.retainAll(list2);  // 保留list1中与list2相同的元素
System.out.println(list1);  // 输出:[Apple]

12.Iterator iterator()

返回一个 Iterator 迭代器,用于遍历 ArrayList 中的元素。

ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {System.out.println(iterator.next());  // 输出:Apple  Banana
}

Java 8 开始在 Collection 接口中引入

13.forEach(Consumer<? super E> action)

14.removeIf(Predicate<? super E> filter)

二、Collection 实现接口/类拓展方法

1.List 接口的其他通用方法

List 接口的实现类(如 ArrayList 和 LinkedList)也提供了许多扩展方法
在这里插入图片描述
以Arraylist为例

add(int index, E element)

在指定位置添加元素。

List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana"));
list.add(1, "Orange");  // 在索引1的位置添加元素
System.out.println(list);  // 输出:[Apple, Orange, Banana]

remove(int index)

移除指定位置的元素。

List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange"));
list.remove(1);  // 移除索引1的元素
System.out.println(list);  // 输出:[Apple, Orange]

set(int index, E element)

在指定位置更新元素。

List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange"));
list.set(1, "Mango");  // 替换索引1的元素
System.out.println(list);  // 输出:[Apple, Mango, Orange]

get(int index)

获取指定索引位置的元素。

List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange"));
System.out.println(list.get(1));  // 输出:Banana

forEach(Consumer<? super E> action)

对 List 中的每个元素执行指定的操作。

ArrayList<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange"));
list.forEach(System.out::println);  // 输出:Apple, Banana, Orange

removeIf(Predicate<? super E> filter)

删除集合中符合条件的所有元素。

ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
numbers.removeIf(n -> n % 2 == 0);  // 删除所有偶数
System.out.println(numbers);  // 输出:[1, 3, 5]

2.LinkedList 类的扩展方法

LinkedList 是基于双向链表实现的 List 接口实现,它不仅可以作为 List 使用,还支持 Deque(双端队列)的一些操作。
在这里插入图片描述

addFirst(E e)

将元素插入到链表的头部。

LinkedList<String> list = new LinkedList<>();
list.addFirst("Apple");
list.addFirst("Banana");
System.out.println(list);  // 输出:[Banana, Apple]

addLast(E e)

将元素添加到链表的尾部。

LinkedList<String> list = new LinkedList<>();
list.addLast("Apple");
list.addLast("Banana");
System.out.println(list);  // 输出:[Apple, Banana]

getFirst()

返回链表头部的元素。如果链表为空,抛出 NoSuchElementException。

LinkedList<String> list = new LinkedList<>(Arrays.asList("Apple", "Banana"));
System.out.println(list.getFirst());  // 输出:Apple

getLast()

返回链表尾部的元素。如果链表为空,抛出 NoSuchElementException。

LinkedList<String> list = new LinkedList<>(Arrays.asList("Apple", "Banana"));
System.out.println(list.getLast());  // 输出:Banana

removeFirst()

移除并返回链表头部的元素。如果链表为空,抛出 NoSuchElementException。

LinkedList<String> list = new LinkedList<>(Arrays.asList("Apple", "Banana"));
System.out.println(list.removeFirst());  // 输出:Apple
System.out.println(list);  // 输出:[Banana]

removeLast()

移除并返回链表尾部的元素。如果链表为空,抛出 NoSuchElementException

LinkedList<String> list = new LinkedList<>(Arrays.asList("Apple", "Banana"));
System.out.println(list.removeLast());  // 输出:Banana
System.out.println(list);  // 输出:[Apple]

3.Set 集合forEach(),removeIf()方法

HashSet

HashSet 基于哈希表实现,集合中的元素是无序的且不允许重复。

forEach(Consumer<? super E> action)

forEach 遍历集合并执行指定操作。

HashSet<String> set = new HashSet<>(Arrays.asList("Apple", "Banana"));
set.forEach(System.out::println);  // 输出:Apple, Banana(顺序不确定)

removeIf(Predicate<? super E> filter)

从 HashSet 中移除满足 Predicate 条件的元素。

HashSet<Integer> set = new HashSet<>(Arrays.asList(1, 2, 3, 4));
set.removeIf(n -> n % 2 == 0);  // 移除偶数
System.out.println(set);  // 输出:[1, 3]

LinkedHashSet

LinkedHashSet 基于哈希表实现,但它还维护了插入顺序,遍历时按照元素的插入顺序返回。

forEach(Consumer<? super E> action)

与 HashSet 类似,但因为 LinkedHashSet 维护了元素的插入顺序,所以遍历时元素的顺序是可预测的。

LinkedHashSet<String> set = new LinkedHashSet<>(Arrays.asList("Apple", "Banana"));
set.forEach(System.out::println);  // 输出:Apple, Banana

removeIf(Predicate<? super E> filter)

移除符合条件的元素,操作和 HashSet 相同。

LinkedHashSet<Integer> set = new LinkedHashSet<>(Arrays.asList(1, 2, 3, 4));
set.removeIf(n -> n % 2 == 0);  // 移除偶数
System.out.println(set);  // 输出:[1, 3]

TreeSet

TreeSet 是基于红黑树实现的 Set,它的元素是有序的并且不允许重复。

forEach(Consumer<? super E> action)

forEach 与其他集合类类似,遍历元素时遵循元素的自然顺序或指定的比较器顺序。

TreeSet<Integer> set = new TreeSet<>(Arrays.asList(5, 1, 3, 2, 4));
set.forEach(System.out::println);  // 输出:1, 2, 3, 4, 5

removeIf(Predicate<? super E> filter)

与其他集合类类似

TreeSet<Integer> set = new TreeSet<>(Arrays.asList(1, 2, 3, 4));
set.removeIf(n -> n % 2 == 0);  // 移除偶数
System.out.println(set);  // 输出:[1, 3]

4.Set 集合在自定义类中重写 equals() 和 hashCode() 方法保证元素不重复

假设我们有一个 Person 类,想要把多个 Person 对象存储到 Set 集合中,并且确保 Set 中的 Person 对象不重复。


import java.util.HashSet;
import java.util.Set;
import java.util.Objects;class Person {private String name;private int age;// 构造函数public Person(String name, int age) {this.name = name;this.age = age;}// 重写 equals() 方法,确保对象的值相同才被认为相等@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age && Objects.equals(name, person.name);}// 重写 hashCode() 方法,确保相等的对象有相同的 hashCode@Overridepublic int hashCode() {return Objects.hash(name, age);}// 重写 toString() 方法,方便输出@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + '}';}
}public class SetExample {public static void main(String[] args) {// 创建一个 Set 集合Set<Person> set = new HashSet<>();// 添加元素set.add(new Person("Alice", 25));set.add(new Person("Bob", 30));set.add(new Person("Alice", 25));  // 添加重复元素// 输出集合内容System.out.println(set);  // 输出: [Person{name='Alice', age=25}, Person{name='Bob', age=30}]}
}

总结

Collection 接口定义了集合类通用的方法,这些方法在不同的集合实现类中都有所体现。不同的实现类提供了不同的存储和访问方式,适合不同的业务场景,实现类的扩展方法也为 Java 集合框架提供了更强大的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89456.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89456.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/89456.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有n棍棍子,棍子i的长度为ai,想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大的周长,若无法组成三角形则输出0。

题目描述&#xff1a; 有n棍棍子&#xff0c;棍子i的长度为ai&#xff0c;想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大的周长&#xff0c;若无法组成三角形则输出0。 算法为O(nlogn) 初始理解题目 首先&#xff0c;我们需要清楚地理解题目要求&#xff1a; 输入…

【Echarts】 电影票房汇总实时数据横向柱状图比图

效果图code <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>圆角柱状图</title><script src"https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/echarts.min.js"></script> </head> <…

【深度学习基础】PyTorch中model.eval()与with torch.no_grad()以及detach的区别与联系?

目录1. 核心功能对比2. 使用场景对比3. 区别与联系4. 典型代码示例(1) 模型评估阶段(2) GAN 训练中的判别器更新(3) 提取中间特征5. 关键区别总结6. 常见问题与解决方案(1) 问题&#xff1a;推理阶段显存爆掉(2) 问题&#xff1a;Dropout/BatchNorm 行为异常(3) 问题&#xff1…

博客摘录「 华为云平台-FusionSphere OpenStack 8.2.1 系统加固」2025年7月15日

编号 加固项 "风险 等级" 加固原理/Rationale 审计方法/Audit 期望结果/Expect Results 加固方法/Remediation 1 OpenSSH加固配置 1.1 OpenSSH加固配置 1.1.1 SSH使用的版本 H "Op…

永磁同步电机MTPA与MTPV曲线具体仿真实现

永磁同步电机MTPA与MTPV曲线具体仿真实现 近期做了一些标定试验&#xff0c;实际电机参数并不是确定的&#xff0c;而是变化的&#xff0c;因此很难通过解析的方法算出MTPA的对应点&#xff0c;以及在弱磁区如何过度到MTPV。这个在实际情况下都是一点点标出来的&#xff0c;我这…

Adobe Acrobat 插件功能、应用与开发

什么是 Acrobat 插件&#xff1f; Adobe Acrobat 插件是一种能够扩展 Adobe Acrobat 阅读器/查看器功能的软件组件。Acrobat 是用于查看、创建和编辑 PDF 文档的流行程序&#xff0c;而插件可以为其添加新功能&#xff0c;例如&#xff1a; #mermaid-svg-iqdM1wLkFQhd3ilQ {fon…

Redis学习系列之——高并发应用的缓存问题(二)

一、布隆过滤器布隆过滤器由一个 BitMap 和若干 Hash 函数组成&#xff0c;可以用来快速判断一个值是否存在后端存储中。它是解决 Redis 缓存穿透问题的一个不错的解决方案。工作原理步骤1&#xff1a;当 key-value 键值对存储到 Redis 后&#xff0c;向布隆过滤器添加 key步骤…

Expression 类的静态方法

public static MethodCallExpression Call(Type type, // 包含目标方法的类型string methodName, // 方法名称Type[]? typeArguments, // 泛型方法的类型参数&#xff08;非泛型方法为 null&#xff09;params Expression[]? arguments // 方…

[Nagios Core] 事件调度 | 检查执行 | 插件与进程

第五章&#xff1a;事件调度 欢迎回到Nagios Core&#xff01; 在上一章第四章&#xff1a;配置加载中&#xff0c;我们了解了Nagios如何读取配置文件以知晓需要监控的对象&#xff0c;比如我们的朋友"Web Server 1"。此时Nagios内存中已构建完整的基础设施拓扑图。…

Web3 常用前端库介绍

一、Web3 前端开发&#xff1a;连接用户与区块链的桥梁 随着 Web3 生态的蓬勃发展&#xff0c;前端开发从传统的页面渲染进化为区块链交互的核心枢纽。Web3 前端库作为连接用户与区块链的桥梁&#xff0c;承担着钱包集成、合约交互、数据可视化等关键功能。本文将系统解析主流 …

cnpm命令报internal/modules/cjs/loader.js:797 throw err; ^ Error: Cannot find

在运行一个项目的时候&#xff0c;需要升级电脑各组件的版本&#xff0c;结果导致cnpm命令无法正常使用&#xff0c;cnpm任何命令都会报如下这个错&#xff1a;找了半天&#xff0c;发现是由于cnpm与npm的版本不一致导致的&#xff0c;所以需要卸载并重新安装cnpm&#xff0c;重…

15、鸿蒙Harmony Next开发:创建自定义组件

目录 自定义组件的基本用法 自定义组件的基本结构 struct Component freezeWhenInactive build()函数 Entry EntryOptions Reusable 成员函数/变量 自定义组件的参数规定 build()函数 自定义组件生命周期 自定义组件的创建和渲染流程 自定义组件重新渲染 自定义…

深入理解Map.Entry.comparingByValue()和Map.Entry.comparingByKey()

文章目录深入理解Map.Entry.comparingByValue()和Map.Entry.comparingByKey()1. 方法定义comparingByKey()comparingByValue()2. 基本用法2.1 使用comparingByKey()2.2 使用comparingByValue()3. 方法重载版本comparingByKey(Comparator)comparingByValue(Comparator)4. 高级用…

Mac下载mysql

安装 brew list --versions | grep mysql查看已安装的mysql版本brew search mysql查看支持的mysql版本brew info mysql查看mysql版本信息brew install mysql进行安装/opt/homebrew/opt/mysql/bin/mysqld --initialize-insecure --user$(whoami) --basedir$(brew --prefix mysql…

PageHelper使用说明文档

文章目录一、简介二、集成步骤三、使用方法四、注意事项五、高级用法一、简介 PageHelper 是一个开源的 MyBatis 分页插件&#xff0c;它可以帮助我们在使用 MyBatis 进行数据库操作时方便地实现分页功能。通过简单的配置和少量的代码修改&#xff0c;就可以在查询数据时实现分…

grpo nl2sql qwen3 模型强化学习训练有效果的成立条件有哪些

在使用GRPO&#xff08;强化学习算法&#xff09;对Qwen3模型在NL2SQL&#xff08;自然语言到SQL转换&#xff09;任务上进行强化学习&#xff08;RL&#xff09;训练时&#xff0c;其效果成立的核心条件可归纳为以下几个关键维度&#xff0c;这些条件相互关联&#xff0c;共同…

面向向量检索的教育QA建模:九段日本文化研究所日本语学院的Prompt策略分析(6 / 500)

面向向量检索的教育QA建模&#xff1a;九段日本文化研究所日本语学院的Prompt策略分析&#xff08;6 / 500&#xff09; 系列说明 500 所日本语言学校结构化建模实战&#xff0c;第 6 篇。每篇拆解 1 所学校在 Prompt-QA 系统中的建模策略&#xff0c;分享工程经验&#xff0c;…

墨刀原型图的原理、与UI设计图的区别及转换方法详解-卓伊凡|贝贝

墨刀原型图的原理、与UI设计图的区别及转换方法详解-卓伊凡|贝贝最近有个设计由于时间比较仓促直接用 原型做的&#xff0c;但是原型做的大家都知道是没法用的&#xff0c;以下讲解原型和ui的区别&#xff0c;其次我们下面有三种方法把墨刀的原型变成UI图。一、墨刀原型图的原理…

前端 nodejs vue2 开发环境和微信开发环境 故障终极处理

现象某个vue2旧项目 引入vue-ls 组件等组件&#xff0c;冲突失败后删除,导致开发环境 vxe-table加载失败&#xff0c;还原后还是不行。前段项目崩溃。报警sass 某个方法 Deprecated &#xff0c;之前不会处理方式_失败回退代码项目代码 删除 node_modules&#xff0c; 删除 …

【后端】.NET Core API框架搭建(9) --配置使用Log4Net日志

目录 1.添加包 2.新建公用类 3.新建配置 4.注册 4.1.类库项目设置 5.使用 在 .NET Core 项目中使用 Log4Net 做日志记录&#xff0c;具有很多优势。尽管 .NET Core 自带了 ILogger 接口&#xff08;如使用内置的 ConsoleLogger、DebugLogger 等&#xff09;&#xff0c;但…