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

【JAVA CORE_API】Day14 Collection、Iterator、增强for、泛型、List、Set

Collection接口及常用方法

  • Collection<Object> collection = new ArrayList();:实例化ArrayList集合对象;

  • collectionName.add(Object obj);:在集合中增加元素;

  • int sizeName = collectionName.size();:获取集合的长度;

  • collectionName.clear();:清空集合;

  • boolean isEmptyName = collectionName.isEmpty();:检查集合是否为空;

  • collectionName.remove(Object obj);:清除集合中符合参数的值;

  • boolean containsName = new contains();:判断集合元素中是否有符合参数的值(子字符串匹配);

  • collectionName1.addAll(collectionName2);:取两个集合的并集给前面的集合;

  • collectionName1.retainAll(collectionName2);:取两个集合的交集给前面的集合;

  • collectionName1.removeAll(collectionName2);:删除交集元素后赋给前面的集合;

  • boolean containsAllName = containsName1.containAll(containsName2);:检查当前集合是否包含所有参数集合的元素;

Iterator遍历迭代器接口

  • Iterator<Object> iteratorName = collectionName.Iterator();:为Collection创建迭代器;

  • iteratorName.hasNext();:判断集合是否还有元素可以遍历;

  • <E> nextName = iterationName.next();:返回迭代的下一个泛型指定的元素;

  • iterationName.remove();:删除当前元素,一般结合next()方法使用;

增强for循环

  • 只用于遍历集合或数组,语法如下:
for (元素类型<E> : 集合或数组) {循环体
}
  • 例如:
ArrayList<String> list = new ArrayList<>();
list.add(...);
...for (String e : list) {    // 增强型for循环可以使用泛型指定类型接收元素System.out.println(e);
}

泛型在集合中的应用

  • ArrayList类的定义中,<E>中的E为泛型参数,在创建对象时可以将类型作为参数传递,此时,类定义所有的E将被替换成传入的参数;
import java.util.ArrayList;
import java.util.List;public class GenericExample {public static void main(String[] args) {// 使用泛型创建一个只包含字符串的ListList<String> stringList = new ArrayList<>();// 向List中添加元素stringList.add("Hello");stringList.add("World");// 取出元素时不需要进行类型转换,类型安全for (String s : stringList) {System.out.println(s);}// 尝试添加其他类型的数据会在编译时报错// stringList.add(123); // 编译错误:不兼容的类型// 使用泛型创建一个只包含整数的ListList<Integer> intList = new ArrayList<>();intList.add(1);intList.add(2);intList.add(3);// 使用泛型方法进行求和操作int sum = sumOfList(intList);System.out.println("Sum of integers: " + sum);}// 使用泛型方法来计算List中所有元素的和public static <T extends Number> int sumOfList(List<T> list) {int sum = 0;for (T number : list) {sum += number.intValue(); // 使用Number类的方法来处理泛型}return sum;}
}

List集合

  • 层级关系:Collection(集合接口,无序) → List(子接口,有序)→ ArrayList、LinkedList(List的实现类);

  • ArrayList和LinkedList(链表)的方法在逻辑上完全相同,ArrayList更适合随机访问,LinkedList更适合插入和删除数据或业务中只在两端进行操作数据,只在性能上有差别。

get和set

  • listName.get(int index);:获取index对应的下标的元素,下标由0开始;

  • listName.set(int index, <E> element);:将elment值放在下标为index的位置;

public void testGetAndSet() {List<String> list = new ArrayList<String>();list.add("java");list.add("php");list.add("c#");list.add("cpp");list.add("objective-c");// get方法遍历Listfor (int i = 0; i < list.size(); i++) {System.out.println(list.get(i).toUpperCase());}String value = list.set(1, "c++");System.out.println(value);    // cppSystem.out.println(list);    // [java, c++, php, c#, objective-c]list.set(1, list.set(3, list.get(1)));    // 交换位置1和3的元素System.out.println(list);    // [java, c#, php, c++, objective-c]
}
  • listName.add(<E> element);:插入数据elment;

    • listName.add(int index, <E> element);:将数据element插入在index位置;
  • listName.remove(int index);:删除下表为index的元素;

subList():获取子集方法

  • List<E> subListName = listName.subList(int start, int end);:获得下标为start到end的子集(含头不含尾);

    • listName.subList(int start, int end).clear();:删除连续元素;

集合与数组的转换

  • String[] arrayName = collectionName.toArray(new String[collectionName.size()]);:将集合转换为数组。
package day14;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;public class CollectionToArray {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("one");c.add("two");c.add("three");c.add("four");c.add("five");System.out.println(c);      // [one, two, three, four, five]/*** 1) 若参数数组元素个数==集合元素个数,那就正常转换* 2) 若参数数组元素个数>集合元素个数,那也正常转换(按照集合大小给数组)* 3) 若参数数组元素个数<集合元素个数,那也正常转换,同时在末尾补默认值*/String[] array = c.toArray(new String[5]);System.out.println(Arrays.toString(array));  // [one, two, three, four, five]}
}
  • List<E> listName = Arrays.asList(arrayName);:将数组转换为集合,注意:数组只能转为有序数组,是因为数组是有序的,而且不支持增删,因为数组是定长的。
package day14;import java.util.Arrays;
import java.util.List;/*** 数组转集合*/
public class ArrayToList {public static void main(String[] args) {String[] array = {"one","two","three","four","five"};System.out.println("array:" + Arrays.toString(array));  // [one, two, three, four, five]// asList() 方法将数组转换为集合,会返回内部的ArrayList对象,内部直接引用了数组ArrayList<String> list = Arrays.asList(array);System.out.println("list:" + list);  // [one, two, three, four, five]// 修改数组中元素数据后,集合也会相应的改变array[1] = "six";System.out.println("array:" + Arrays.toString(array));  // [one, six, three, four, five]System.out.println("list:" + list);  // [one, six, three, four, five]// 修改集合中元素数据后,数组也会相应的改变list.set(2, "seven");System.out.println("array:" + Arrays.toString(array));  // [one, six, seven, four, five]System.out.println("list:" + list);  // [one, six, seven, four, five]// 给集合添加/删除元素相当于给数组添加/删除元素// 所以,集合与数组不支持添加/删除元素,是因为数组是定长的// 如果修改,则会抛出UnsupportedOperationException(不支持的操作)异常list.add("eight");System.out.println("array:" + Arrays.toString(array));System.out.println("list:" + list);}
}

相关文章:

【JAVA CORE_API】Day14 Collection、Iterator、增强for、泛型、List、Set

Collection接口及常用方法 Collection<Object> collection new ArrayList();&#xff1a;实例化ArrayList集合对象&#xff1b; collectionName.add(Object obj);&#xff1a;在集合中增加元素&#xff1b; int sizeName collectionName.size();&#xff1a;获取集合…...

Go更换国内源配置环境变量

背景 要在中国境内下载和使用Go编程语言的包&#xff0c;可以使用国内的Go模块代理来加速下载速度。以下是一些常见的国内Go模块代理源以及如何切换到这些源的方法&#xff1a; 常见国内Go模块代理源 七牛云&#xff08;Qiniu&#xff09; https://goproxy.cn 阿里云&#xff0…...

澎湃认证显实力,浪潮信息存储兼容新篇章

浪潮信息在存储技术兼容性领域取得新突破&#xff0c;其集中式存储HF/AS系列与长擎安全操作系统24强强联合&#xff0c;成功完成澎湃技术认证。此次合作不仅验证了双方产品的无缝对接能力&#xff0c;更体现了浪潮信息在推动全产业链共建共享方面的坚定决心。 浪潮信息澎湃技术…...

Leetcode 3255. Find the Power of K-Size Subarrays II

Leetcode 3255. Find the Power of K-Size Subarrays II 1. 解题思路2. 代码实现 题目链接&#xff1a;3255. Find the Power of K-Size Subarrays II 1. 解题思路 这一题是题目3254的进阶版&#xff0c;其实主要就是增加了算法复杂度。 整体上来说的话思路还是一个分段的思…...

Kotlin学习02-变量、常量、整数、浮点数、操作符、元组、包、导入

变量、常量、整数、浮点数、操作符、元组、包、导入 Book.kt package com.wujialiang.packclass Book {var title: String "Hello" }val PI 3.14; val E 2.178;Main.kt //引入包 //import com.wujialiang.pack.Book; import com.wujialiang.pack.*; //重命名导…...

C++的模板简介

文章目录 一、前言二、函数模板&#xff08;Function Template&#xff09;三、类模板&#xff08;Class Template&#xff09;四、变参模板&#xff08;Variadic Template&#xff09;五、模板的递归与元编程六、模板的局限与陷阱七、常用模板的实例八、C20 的概念&#xff08…...

树莓派5 笔记25:第一次启动与配置树莓派5_8G

今日继续学习树莓派5 8G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下&#xff1a; 今日购得了树莓派5_8G版本&#xff0c;性能是同运…...

Melittin 蜂毒肽;GIGAVLKVLT TGLPALISWI KRKRQQ

【Melittin 蜂毒肽 简介】 蜂毒肽&#xff08;Melittin&#xff09;是蜜蜂毒液中的主要活性成分&#xff0c;由26个氨基酸组成&#xff0c;具有强碱性&#xff0c;易溶于水&#xff0c;是已知抗炎性最强的物质之一。蜂毒肽具有多种生物学、药理学和毒理学作用&#xff0c;包括…...

day32

更新源 cd /etc/apt/ sudo cp sources.list sources.list.save 将原镜像备份 sudo vim sources.list 将原镜像修改成阿里源/清华源&#xff0c;如所述 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiver…...

【clickhouse】 使用 SQLAlchemy 连接 ClickHouse 数据库的完整指南

我听见有人猜 你是敌人潜伏的内线 和你相知多年 我确信对你的了解 你舍命救我画面 一一在眼前浮现 司空见惯了鲜血 你忘记你本是娇娆的红颜 感觉你我彼此都那么依恋 &#x1f3b5; 许嵩《内线》 ClickHouse 是一款非常高效的开源列式数据库&#xff0c;因…...

按键收集单击,双击和长按

按键收集单击,双击和长按 引言 在我们生活中, 按键是必不可少的, 不同的电器, 有不同的按键, 但是按键总有不够用的时候, 那么给与一个按键赋予不同的功能,就必不可少了. 一个按键可以通过按下的时间长短和频次, 来定义其类型。 一次按键收集&#xff0c; 都是在一个按键收集周…...

进程的异常终止

进程的异常终止 进程收到了某些信号&#xff0c;他杀 进程自己调用abort函数&#xff0c;产生了SIGABRT(6)信号&#xff0c;自杀 进程的最后一个线程收到了"取消"操作&#xff0c;并且做出响应 如果进程是异常结束的&#xff0c;atexit\on_exit它们事先注册的遗言…...

并发编程 | Future是如何优化程序性能

在初识Future一文中介绍了Future的核心方法。本文中接着介绍如何用Future优化我们的程序性能。 在此之前&#xff0c;有必要介绍Future接口的一个实现类FutureTask。 FutureTask介绍 FutureTask继承结构 首先我们看一下FutureTask的继承结构&#xff1a; public class Futur…...

Oracle笔记

一、 如何解决 sqlplus 无法使用退格键和方向键 .bashrc 中添加如下内容&#xff0c;解决 退格键 stty erase ^h 安装 rlwap 后&#xff0c;执行如下命令可解决 方向键 rlwap sqlplus 二、 都有哪些备份数据到工具 三、 谈谈 你对 oracle 中实例和数据库的理解 数据库是一…...

LVS+Keepalived 双机热备

LVSKeepalived 双机热备 Keepalived案例分析Keepalived工具介绍Keepalived工具介绍一、功能特点 一、理解Keepalived实现原理实验报告资源列表一、安装keepalived以及ipvsadm Keepalived案例分析 企业应用中&#xff0c;单台服务器承担应用存在单点故障的危险单点故障一旦发生…...

Web Image scr图片从后端API获取基本实现

因系统开发中需求&#xff0c;会有页面显示图片直接从后端获取后显示&#xff0c;代码如下&#xff1a; 后端&#xff1a; /*** 获取图片流* param response* param fileName*/RequestMapping(value"getImgStream",method RequestMethod.GET)public void getImgStr…...

2024音频剪辑指南:探索四大高效工具!

音频剪辑不仅仅是技术活&#xff0c;更是一种艺术创作&#xff0c;它能够让声音更加生动、更具感染力。今天&#xff0c;我们就来探索几款优秀的音频剪辑工具。 福昕音频剪辑 链接&#xff1a;www.pdf365.cn/foxit-clip/ 福昕音频剪辑是一款界面简洁、操作直观的音频编辑软件…...

“CSS”第一步——WEB开发系列13

CSS (Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;是一种用来为结构化文档&#xff08;如 HTML 文档或 XML 应用&#xff09;添加样式&#xff08;字体、间距和颜色等&#xff09;的计算机语言&#xff0c;CSS 文件扩展名为 .css。 一、什么是 CSS&a…...

IEEE802网络协议和标准

IEEE802网络协议和标准 802委员会IEEE 802介绍现有标准 IEEE 802.3介绍物理媒介类型MAC子层与LLC子层主要内容通讯标准POE供电标准802.3af、802.3at、802.3btIEEE802.3af的工作过程&#xff1a;IEEE802.3af主要供电参数&#xff1a;IEEE802.3af的分级参数&#xff1a;为什么会有…...

vulnhub靶机 DC-9(渗透测试详解)

一、靶机信息收集 1、靶机下载 https://download.vulnhub.com/dc/DC-9.zip 2、靶机IP扫描 3、探测靶机主机、端口、服务版本信息 4、靶机目录扫描 二、web渗透测试 1、访问靶机IP 查看页面功能点&#xff0c;发现一个搜索框和登录框 2、测试一下是否存在sql注入 查看当前数…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...