当前位置: 首页 > news >正文

Java 集合 示例

Collection

package com.example.demo1;import java.util.ArrayList;
import java.util.Iterator;
import java.util.Collection;public class CollectionDemo {public static void main(String[] args) {// ======================================// 1. 初始化Collection集合(使用ArrayList实现)// ======================================Collection<String> fruits = new ArrayList<>();// ======================================// 2. 演示Collection常用方法// ======================================// boolean add(E e):添加元素fruits.add("苹果");fruits.add("香蕉");fruits.add("橙子");System.out.println("添加后集合:" + fruits);  // 输出:[苹果, 香蕉, 橙子]// boolean contains(Object o):判断是否存在System.out.println("是否包含香蕉:" + fruits.contains("香蕉"));  // 输出:true// int size():集合长度System.out.println("当前集合大小:" + fruits.size());  // 输出:3// boolean remove(Object o):移除指定元素System.out.println("移除苹果结果:" + fruits.remove("苹果"));  // 输出:trueSystem.out.println("移除后集合:" + fruits);  // 输出:[香蕉, 橙子]// boolean isEmpty():判断是否为空System.out.println("集合是否为空:" + fruits.isEmpty());  // 输出:false// boolean removeIf(Predicate):根据条件移除(需要Java 8+)// 示例:移除所有包含"橙"字的元素boolean removed = fruits.removeIf(fruit -> fruit.contains("橙"));System.out.println("条件移除结果:" + removed);  // 输出:trueSystem.out.println("条件移除后集合:" + fruits);  // 输出:[香蕉]// void clear():清空集合fruits.clear();System.out.println("清空后集合:" + fruits);  // 输出:[]// ======================================// 3. 重新填充数据用于遍历演示// ======================================fruits.add("葡萄");fruits.add("草莓");fruits.add("芒果");// ======================================// 4. 迭代器遍历(Iterator)// ======================================Iterator<String> iterator = fruits.iterator();System.out.println("\n迭代器遍历:");while (iterator.hasNext()) {  // 判断是否有下一个元素String fruit = iterator.next();  // 获取当前元素并移动指针System.out.print(fruit + " ");   // 输出:葡萄 草莓 芒果 // 示例:用迭代器删除元素(安全操作)if ("草莓".equals(fruit)) {iterator.remove();  // 删除当前指向的元素}}System.out.println("\n迭代器删除后集合:" + fruits);  // 输出:[葡萄, 芒果]// ======================================// 5. 增强for循环(for-each)// ======================================System.out.println("\n增强for循环遍历:");for (String fruit : fruits) {  // 自动遍历集合中每个元素System.out.print(fruit + " ");  // 输出:葡萄 芒果 }// ======================================// 6. Lambda表达式的使用(结合Collection的forEach)// ======================================System.out.println("\nLambda表达式遍历:");fruits.forEach(fruit -> {  // Lambda表达式替代匿名内部类System.out.print(fruit + " ");  // 输出:葡萄 芒果 });// 更简洁的Lambda写法(方法引用)// fruits.forEach(System.out::print);}
}

能使用 Lambda 表达式,需满足以下条件

1. 目标类型为函数式接口

Lambda 表达式只能用于函数式接口的上下文。函数式接口指的是仅包含一个抽象方法的接口。

@FunctionalInterface
public interface Predicate<T> {boolean test(T t);
}

Predicate<T> 被 @FunctionalInterface 注解标记,表明它是函数式接口,且只有一个抽象方法 test(T t)。所以,removeIf 方法的参数位置可使用 Lambda 表达式。

2. 参数类型兼容

Lambda 表达式的参数类型要和函数式接口中抽象方法的参数类型兼容。Predicate<String> 里 test 方法的参数类型为 String,因此 Lambda 表达式的参数类型也得是 String,像 fruit -> fruit.contains("橙") 中,fruit 就被推断为 String 类型。

3. 返回值类型匹配

Lambda 表达式的返回值类型要和函数式接口中抽象方法的返回值类型一致。Predicate<String> 里 test 方法的返回值类型是 boolean,所以 fruit -> fruit.contains("橙") 的返回值也得是 boolean 类型,contains 方法恰好返回 boolean 类型的值,满足要求。

不用Lambda 表达式的写法

// ... 已有代码 ...
// boolean removeIf(Predicate):根据条件移除(需要Java 8+)
// 示例:移除所有包含"橙"字的元素
boolean removed = fruits.removeIf(new java.util.function.Predicate<String>() {@Overridepublic boolean test(String fruit) {return fruit.contains("橙");}
});
System.out.println("条件移除结果:" + removed);  // 输出:true
System.out.println("条件移除后集合:" + fruits);  // 输出:[香蕉]
// ... 已有代码 ...

LinkedList

package com.example.demo1;import java.util.LinkedList;  // 需要导入LinkedList类public class a {public static void main(String[] args) {// 创建一个存储String类型的LinkedListLinkedList<String> fruits = new LinkedList<>();// 1. 演示 addFirst 和 addLastfruits.addFirst("Apple");  // 列表变为: [Apple]fruits.addLast("Banana");  // 列表变为: [Apple, Banana]fruits.addFirst("Grape");  // 列表变为: [Grape, Apple, Banana]System.out.println("添加后列表: " + fruits);  // 输出: [Grape, Apple, Banana]// 2. 演示 getFirst 和 getLastString first = fruits.getFirst();  // 获取第一个元素String last = fruits.getLast();    // 获取最后一个元素System.out.println("第一个元素: " + first);  // 输出: GrapeSystem.out.println("最后一个元素: " + last);   // 输出: Banana// 3. 演示 removeFirst 和 removeLastString removedFirst = fruits.removeFirst();  // 删除并返回第一个元素(Grape)String removedLast = fruits.removeLast();    // 删除并返回最后一个元素(Banana)System.out.println("被删除的第一个元素: " + removedFirst);  // 输出: GrapeSystem.out.println("被删除的最后一个元素: " + removedLast);   // 输出: BananaSystem.out.println("删除后的列表: " + fruits);  // 输出: [Apple]}
}

泛型能避免强制类型转换

package com.example.demo1;import java.util.ArrayList;public class a {public static void main(String[] args) {// 示例1:不使用泛型(原始类型)ArrayList rawList = new ArrayList();  // 未指定泛型类型rawList.add("Java泛型示例");  // 添加String类型元素// 取出元素时需要强制类型转换(因为编译器不知道元素具体类型)String rawStr = (String) rawList.get(0);System.out.println("非泛型方式获取:" + rawStr);// 示例2:使用泛型(指定<String>类型)ArrayList<String> genericList = new ArrayList<>();  // 指定泛型类型为StringgenericList.add("Java泛型优势");  // 编译器会检查只能添加String类型// 取出元素时无需强制转换(编译器已知是String类型)String genericStr = genericList.get(0);System.out.println("泛型方式获取:" + genericStr);}
}

http://www.xdnf.cn/news/1129879.html

相关文章:

  • 应用部署作业-02-流程
  • Excel制作玫瑰图
  • 20250715_Sneak_neuro 靶机复盘
  • 使用JS编写用户信息采集表单
  • 基于conda包的环境创建、激活、管理与删除
  • C++-linux系统编程 8.进程(二)exec函数族详解
  • 3.2数据库-关系代数-函数依赖-范式
  • IDEA中删除多余的jdk选项 【IDEA2024版】
  • Linux-【单体架构/分布式架构】
  • 李宏毅《生成式人工智能导论》 | 第9讲 AI Agent
  • AI问答-Token:在人工智能领域,Token 是模型处理文本的核心单元 / 最小可处理片段
  • cursor使用mcp连接mysql数据库,url方式
  • 基于Python的图像文字识别系统
  • Transformer是什么 - 李沐论文《Attention Is All You Need》精读
  • 数据怎么分层?从ODS、DW、ADS三大层一一拆解!
  • ESP32S3+VSCode+PlatformIO+Arduino+Freertos开发入门指南:基于Arduino框架的应用开发全流程
  • 基于按键开源MultiButton框架深入理解代码框架(一)(指针的深入理解与应用)
  • 137. 只出现一次的数字 II
  • python+selenium UI自动化初探
  • Linux操作系统之信号:保存与处理信号
  • 嵌入式Linux:进程间通信机制
  • URL 转静态 HTML 文件 API 数据接口
  • 算法入门:BFS与DFS详解(C++实现)
  • k8s之Attach 和 Mount
  • [AI8051U入门第三步]串口1使用-printf重定向(乱码解决办法)
  • 生产问题排查-数据库连接池耗尽
  • Linux 文件系统实现层详解:原理、结构与驱动衔接
  • 已知均数与标准差,如何生成一组正态分布数据?
  • 15.图像 模板轮廓检测
  • Unity音游开发全指南:模板与免费资源高效构建节奏游戏