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

JavaSE21——ArrayList

集合框架

ArrayList

一、概述

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

ArrayList 继承了 AbstractList ,并实现了 List 接口。

ArrayList中的元素可以通过索引访问,并且可以很容易地添加和删除元素。

二、特点

  1. 动态数组:ArrayList是一个动态数组,可以根据需要自动扩展或缩小数组的大小。
  2. 快速访问:ArrayList中的元素可以通过索引访问,访问速度比普通数组更快。
  3. 方便的添加和删除操作:ArrayList提供了add()、remove()等方法,可以方便地添加和删除元素。
  4. 可迭代性:ArrayList实现了Iterable接口,可以使用for-each循环遍历元素。

三、使用示例

1.创建ArrayList对象
ArrayList<String> list = new ArrayList<String>();

泛型: 在 Java 中,ArrayList 支持使用泛型来指定存储的元素类型。通过使用泛型,我们可以确保 ArrayList 只能存储特定类型的对象,提高了类型的安全性和代码的可读性。

泛型可以是基本数据类型的包装类,也可以是自定义类。

使用泛型的好处是可以在编译时进行类型检查,并且可以避免在运行时出现类型转换错误。同时,通过使用泛型,可以在提取元素时避免使用类型转换。

**注意:**我们不能创建原始数据类型(如int,float,char等)的数组列表。相反,我们必须使用它们对应的包装器类。

基本类型对应的包装类表如下:

基本类型引用类型
booleanBoolean
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter

此外,BigInteger、BigDecimal 用于高精度的运算,BigInteger 支持任意精度的整数,也是引用类型,但它们没有相对应的基本类型。

2.添加元素到ArrayList中
list.add("Apple");  
list.add("Banana");  
list.add("Orange");

我们还可以使用索引将元素添加到数组列表中。例如,

import java.util.ArrayList;class Main {public static void main(String[] args){ArrayList<String> animals = new ArrayList<>();//添加元素animals.add(0,"Dog");animals.add(1,"Cat");animals.add(2,"Horse");System.out.println("ArrayList: " + animals);}
}
3.将一个数组列表的元素添加到另一个数组列表

要将数组列表的所有元素添加到新的数组列表,请使用addAll()方法。例如,

import java.util.ArrayList;class Main {public static void main(String[] args){ArrayList<String> mammals = new ArrayList<>();mammals.add("Dog");mammals.add("Cat");mammals.add("Horse");System.out.println("Mammals: " + mammals);ArrayList<String> animals = new ArrayList<>();animals.add("Crocodile");// 添加mammals所有元素到animalsanimals.addAll(mammals);System.out.println("Animals: " + animals);}
}
4 使用asList()初始化ArrayList

与数组不同,我们不能直接初始化数组列表。 但是,我们可以使用Arrays类的asList()方法来达到相同的效果。

为了使用asList()方法,我们必须先导入 java.util.Arrays 包。

例如

import java.util.ArrayList;
import java.util.Arrays;class Main {public static void main(String[] args) {//创建数组列表ArrayList<String> animals = new ArrayList<>(Arrays.asList("Cat", "Cow", "Dog"));System.out.println("ArrayList: " + animals);//访问数组列表中的元素String element = animals.get(1);System.out.println("访问元素: " + element);}
}
5 获取ArrayList中的元素

1.使用get()方法

String fruit1 = list.get(0); // 获取第一个元素  
String fruit2 = list.get(1); // 获取第二个元素

2.使用 iterator() 方法

import java.util.ArrayList;
import java.util.Iterator;class Main {public static void main(String[] args){ArrayList<String> animals = new ArrayList<>();//在数组列表中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");animals.add("Zebra");//创建一个Iterator对象Iterator<String> iterate = animals.iterator();System.out.print("ArrayList: ");//使用Iterator的方法访问元素while(iterate.hasNext()){System.out.print(iterate.next());System.out.print(", ");}}
}
6 更改ArrayList元素

要更改数组列表的元素,我们可以使用set()方法。例如,

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals= new ArrayList<>();//在数组列表中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("ArrayList: " + animals);//更改数组列表的元素animals.set(2, "Zebra");System.out.println("修改后的ArrayList: " + animals);}
}
7 删除ArrayList元素

1 remove()

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals = new ArrayList<>();//在数组列表中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("初始ArrayList: " + animals);//从索引2中删除元素String str = animals.remove(2);System.out.println("最终ArrayList: " + animals);System. out.println("删除元素: " + str);}
}

2 removeAll()

使用removeAll()方法,删除数组中的所有元素

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals = new ArrayList<>();// 在ArrayList中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("初始ArrayList: " + animals);// 删除所有元素animals.removeAll(animals);System.out.println("最终ArrayList: " + animals);}
}

3 clear()

还可以使用removeAll()方法,删除数组中的所有元素

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals= new ArrayList<>();//在数组列表中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("Initial ArrayList: " + animals);//删除所有元素animals.clear();System.out.println("Final ArrayList: " + animals);}
}

注意:clear()方法比removeAll()方法更高效。

8 获取集合大小

如果要计算 ArrayList 中的元素数量可以使用 size() 方法:

import java.util.ArrayList;public class RunoobTest {public static void main(String[] args) {ArrayList<String> sites = new ArrayList<String>();sites.add("hello");sites.add("world");sites.add("hi");sites.add("china");System.out.println(sites.size());}
}
9 遍历 ArrayList

1 for循环

import java.util.ArrayList;public class RunoobTest {public static void main(String[] args) {ArrayList<String> sites = new ArrayList<String>();sites.add("hello");sites.add("world");sites.add("hi");sites.add("china");for (int i = 0; i < sites.size(); i++) {System.out.println(sites.get(i));}}
}

2.使用 forEach 循环

import java.util.ArrayList;public class RunoobTest {public static void main(String[] args) {ArrayList<String> sites = new ArrayList<String>();sites.add("hello");sites.add("world");sites.add("hi");sites.add("china");for (String i : sites) {System.out.println(i);}}
}
10 ArrayList 排序

要对数组列表的元素进行排序,我们使用Collections类的sort()方法。为了使用它,我们必须先导入java.util.Collections包。

默认情况下,排序以字母或数字升序进行。例如,

import java.util.ArrayList;
import java.util.Collections;class Main {public static void main(String[] args){ArrayList<String> animals= new ArrayList<>();//在数组列表中添加元素animals.add("Horse");animals.add("Zebra");animals.add("Dog");animals.add("Cat");System.out.println("未排序的ArrayList: " + animals);//对数组列表进行排序Collections.sort(animals);System.out.println("排序后的ArrayList: " + animals);}
}

以下实例对数字进行排序:

import java.util.ArrayList;
import java.util.Collections;  // 引入 Collections 类public class RunoobTest {public static void main(String[] args) {ArrayList<Integer> myNumbers = new ArrayList<Integer>();myNumbers.add(33);myNumbers.add(15);myNumbers.add(20);myNumbers.add(34);myNumbers.add(8);myNumbers.add(12);Collections.sort(myNumbers);  // 数字排序for (int i : myNumbers) {System.out.println(i);}}
}
11 ArrayList转数组

在Java中,可以使用toArray()方法将数组列表转换为数组。例如,

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals= new ArrayList<>();//在数组列表中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("ArrayList: " + animals);//创建一个新的String类型数组String[] arr = new String[animals.size()];//将ArrayList转换成数组animals.toArray(arr);System.out.print("Array: ");for(String item:arr) {System.out.print(item+", ");}}
}
12 数组转ArrayList

数组转换为Arraylist。为此,可以使用Arrays类的asList()方法。

要使用asList(),必须先导入java.util.Arrays包。例如,

import java.util.ArrayList;
import java.util.Arrays;class Main {public static void main(String[] args) {//创建一个字符串类型的数组String[] arr = {"Dog", "Cat", "Horse"};System.out.print("Array: ");//打印数组for(String str: arr) {System.out.print(str);System.out.print(" ");}//从数组创建ArrayListArrayList<String> animals = new ArrayList<>(Arrays.asList(arr));System.out.println("\nArrayList: " + animals);}
}
13 ArrayList转换为字符串

要将数组列表转换为字符串,可以使用toString()方法。例如

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals = new ArrayList<>();//在ArrayList中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("ArrayList: " + animals);//将ArrayList转换为字符串String str = animals.toString();System.out.println("String: " + str);}
}

注意: toString()将整个数组列表转换为单个String。

四、 ArrayLiat 常用API

Java ArrayList 常用方法列表如下:

方法描述
add()将元素插入到指定位置的 arraylist 中
addAll()添加集合中的所有元素到 arraylist 中
clear()删除 arraylist 中的所有元素
clone()复制一份 arraylist
contains()判断元素是否在 arraylist
get()通过索引值获取 arraylist 中的元素
indexOf()返回 arraylist 中元素的索引值
removeAll()删除存在于指定集合中的 arraylist 里的所有元素
remove()删除 arraylist 里的单个元素
size()返回 arraylist 里元素数量
isEmpty()判断 arraylist 是否为空
subList()截取部分 arraylist 的元素
set()替换 arraylist 中指定索引的元素
sort()对 arraylist 元素进行排序
toArray()将 arraylist 转换为数组
toString()将 arraylist 转换为字符串
ensureCapacity()设置指定容量大小的 arraylist
lastIndexOf()返回指定元素在 arraylist 中最后一次出现的位置
retainAll()保留 arraylist 中在指定集合中也存在的那些元素
containsAll()查看 arraylist 是否包含指定集合中的所有元素
trimToSize()将 arraylist 中的容量调整为数组中的元素个数
removeRange()删除 arraylist 中指定索引之间存在的元素
replaceAll()将给定的操作内容替换掉数组中每一个元素
removeIf()删除所有满足特定条件的 arraylist 元素
forEach()遍历 arraylist 中每一个元素并执行特定操作

相关文章:

JavaSE21——ArrayList

集合框架 ArrayList 一、概述 ArrayList 类是一个可以动态修改的数组&#xff0c;与普通数组的区别就是它是没有固定大小的限制&#xff0c;我们可以添加或删除元素。 ArrayList 继承了 AbstractList &#xff0c;并实现了 List 接口。 ArrayList中的元素可以通过索引访问…...

找质数(枚举 埃氏筛 线性筛)

输入一个数&#xff0c;返回小于等于这个数的质数。 枚举法&#xff1a; public static int countPrimes(int n) {int cnt0;for(int i2;i<n;i) {if(prime(i))cnt;}return cnt;}private static boolean prime(int x) {for(int i2;i*i<x;i){if(x%i0)return false;}return …...

第十二章 ObjectScript 系统标志和限定符 (qspec) - 标志

文章目录 第十二章 ObjectScript 系统标志和限定符 (qspec) - 标志 示例取消Negation标志Flags 第十二章 ObjectScript 系统标志和限定符 (qspec) - 标志 类库中的许多方法都接受 qspec 参数&#xff0c;通过该参数&#xff0c;可以控制将外部源导入 IRIS、控制代码的编译方式以…...

解决Windows Server 2012 由于没有远程桌面授权服务器可以提供需求可证

刚开始提示 之后就登录不了 &#xff08;如下图提示&#xff09; 由于windows server 2012 R2 安装了 远程桌面角色&#xff0c;但是这个角色是120天免费的&#xff0c;需要购买授权的。解决方法是取消/删除这个角色&#xff0c;就可以恢复正常的远程 一直下一步 远程桌面服…...

上位机底部栏 UI如何设置

上位机如果像设置个多页面切换&#xff1a; 位置&#xff1a; 代码如下&#xff1a; "tabBar": {"color": "black","selectedColor": "#d43c33","borderStyle":"black","backgroundColor": …...

MySQL表的增删改查(基础)

文章目录 一、CRUD二、新增&#xff08;Create&#xff09;2.1 单行数据全列插入2.2多行数据指定列插入 三、查询3.1 全列查询3.2 指定列查询3.3 查询字段表达式3.4 别名3.5 去重 DISTINCT3.6 排序3.7 条件查询 WHERE3.8 分页查询 LIMIT 四、修改&#xff08;Update&#xff09…...

uniapp书写顶部选项卡代码详细例子

以下是一个基于uni-app框架&#xff0c;使用顶部选项卡的代码示例。 在页面的.vue文件中&#xff0c;添加一个uni-tab-bar组件&#xff0c;并在组件内部添加多个uni-tab-bar-item组件&#xff0c;来实现顶部选项卡的布局。 <template><view><uni-tab-bar :cur…...

注册中心ZK、nameServer、eureka、Nacos介绍与对比

前言 注册中心的由来 微服务架构是存在着很多跨服务调用,每个服务都存在着多个节点,如果有多个提供者和消费者,当提供者增加/减少或者消费者增加/减少,双方都需要感知发现。所以诞生了注册中心这个中间件。 市面上有很多注册中心,如 Zookeeper、NameServer、Eureka、Na…...

杂志详情。

<!DOCTYPE html> <html><head><title>杂志详情</title><meta http-equiv"content-type" content"text/html; charsetutf-8"/><meta name"apple-mobile-web-app-capable" content"yes"/><…...

前端知识与基础应用#2

标签的分类 关于标签我们可以分为 &#xff1a; 单标签&#xff1a;img, br hr 双标签&#xff1a;a&#xff0c;h,div 按照属性可分为&#xff1a; 块儿标签&#xff08;自己独自占一行&#xff09;&#xff1a;h1-h6, p,div 行内&#xff08;内联&#xff09;标签&#xff08…...

【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割6(数据预处理)

由于之前哔站作者整理的LUNA16数据处理方式过于的繁琐&#xff0c;于是&#xff0c;本文就对LUNA16数据做一个新的整理&#xff0c;最终得到的数据和形式是差不多的。但是&#xff0c;主要不同的是代码逻辑比较的简单&#xff0c;便于理解。 对于数据集的学习&#xff0c;可以…...

硬件加速器及其深度神经网络模型的性能指标理解

前言&#xff1a; 现如今&#xff0c;深度神经网络模型和硬件加速器&#xff0c;如GPU、TPU等的关系可谓是“不分彼此”&#xff0c;随着模型参数的增加&#xff0c;硬件加速器成为了训练、推理深度神经网络不可或缺的一个工具&#xff0c;而近年来硬件加速器的发展也得益于加速…...

嵌入式每日500(4)231104 (Flash类型定义、Flash常量定义、Flash函数)

文章目录 1.Flash类型定义&#xff08;两个结构体&#xff09;2.Flash常量定义&#xff08;3种&#xff09;3.Flash函数&#xff08;31个&#xff0c;FLASH分为两个区&#xff0c;一个是普通的存储空间&#xff0c;一个是选项字节OB&#xff0c;函数名里带OB的就是对选项字节空…...

21款奔驰GLC300L升级23P驾驶辅助 出行更加的安全

驾驶辅助和自动驾驶的区别就是需要人为去接管&#xff0c;虽然车辆会根据道路自己行驶&#xff0c;弯道上也能居中自动修正行驶&#xff0c;长时间不接管方向盘&#xff0c;系统会提示人为接管&#xff0c;这就是奔驰的23P驾驶辅助系统&#xff0c; 很多车友升级23P驾驶辅助系…...

【小黑嵌入式系统第七课】PSoC® 5LP 开发套件(CY8CKIT-050B )——PSoC® 5LP主芯片、I/O系统、GPIO控制LED流水灯的实现

上一课&#xff1a; 【小黑嵌入式系统第六课】嵌入式系统软件设计基础——C语言简述、程序涉及规范、多任务程序设计、状态机建模(FSM)、模块化设计、事件触发、时间触发 文章目录 一、PSoC 5LP主芯片二、PSoC 5LP I/O系统(1) I/O系统特性(2) I/O系统怎样运作&#xff1f;1、I/…...

深度学习简史

一、说明 为了学习好深度学习&#xff0c;有必要知道深度学习的整个成长历史&#xff0c;可以说&#xff0c;深度学习的发展历程伴随整个人工智能的成长历程&#xff0c;本文将介绍这个历程的关键性历史节点。 二、深度学习的旅程 2.1 深度学习的当前认知 深度学习是机器学习的…...

CSRF 和 XSS 是什么

在Web开发中&#xff0c;安全性是至关重要的。然而&#xff0c;随着网络攻击技术的不断演进&#xff0c;跨站请求伪造&#xff08;CSRF&#xff09;和跨站脚本攻击&#xff08;XSS&#xff09;成为了最常见和具有破坏力的网络安全威胁之一。本文将介绍CSRF和XSS的概念、原理以及…...

亚信科技发布“电信级”核心交易数据库AntDB7.0,助力政企“信”创未来!

昨日&#xff0c;亚信科技AntDB数据库 7.0产品线上发布会成功举办&#xff0c;数千位关注亚信科技、关注国产数据库&#xff0c;致力于推动数据库行业变革的专家、客户热情参与&#xff0c;并对发布会及产品给予高度评价。 新增两大技术特性 作为我国最早一批独立研发的通用型…...

硬件调试-电源纹波测量

硬件调试-电源纹波测量 Fang XS.1452512966qq.com如果有错误&#xff0c;希望被指出&#xff0c;学习技术的路难免会磕磕绊绊量的积累引起质的变化感谢酸奶大佬提供的硬件技术指导&#xff1b; 电源纹波 百度百科定义如下&#xff1a; 纹波是由于直流稳定电源的电压波动而造…...

【洛谷算法题】P5710-数的性质【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5710-数的性质【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格式&a…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

GraphRAG优化新思路-开源的ROGRAG框架

目前的如微软开源的GraphRAG的工作流程都较为复杂&#xff0c;难以孤立地评估各个组件的贡献&#xff0c;传统的检索方法在处理复杂推理任务时可能不够有效&#xff0c;特别是在需要理解实体间关系或多跳知识的情况下。先说结论&#xff0c;看完后感觉这个框架性能上不会比Grap…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译&#xff1a; ### 胃肠道癌症的发病率呈上升趋势&#xff0c;且有年轻化倾向&#xff08;Bray等人&#xff0c;2018&#x…...