Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)
List接口
要了解List接口,就不得不说起Java的集合框架。
(该图来自菜鸟教程)
Collection接口和Map接口
Java 集合框架主要包括两种类型的容器,集合Collection和图Map。
- Collection接口代表了单列集合,它包含了一组Object元素,每个元素都有一个值。
(这里有个“泛型擦除”的概念,在此不提及有兴趣可自行了解) - Map接口代表了双列集合,它包含了一组键值对,每个键值对包含两个值,一个是键,一个是对应的值。
List
Collection 接口又有 3 种子类型,List、Set 和 Queue。
- List 接口存储一组不唯一,有序(插入顺序)的对象。
- 不唯一:允许存储重复的元素。
- 有序:可以精准控制元素添加的位置,因此可以根据索引访问元素。
- <实现类有ArrayList,LinkedList,Vector> 。
- Set 接口存储一组唯一,无序的对象。
- 唯一:元素不允许重复。
- 无序:没有定义顺序,元素的存储顺序可能与添加顺序不同。
- Queue接口:一个先进先出(FIFO)的集合,通常用于模拟队列数据结构。
静态数组
概念
- 是一种线性数据结构。
- 将相同类型的元素存储在连续的内存空间中。
初始化
java中两种创建静态数组的形式如下,
int[] array = new int[5]; // { 0, 0, 0, 0, 0 } int[] iarray = { 1, 2, 3, 5, 4 };
-
- 第一行代码创建了一个名叫array的数组,长度大小为5,并且数组的长度大小不能改变。
- 注释的意思是,java会自动给数组内的元素赋值为默认值,即int型的默认值0。
- 第二行代码创建了一个名叫iarray的数组,长度大小为5,并且长度大小也无法改变,且编写者主动赋值为一到五的数字。
ArrayList类
概念和性质
- ArrayList 继承了 AbstractList类 ,并实现了 List 接口。
(AbstractList是List接口的抽象实现类,它继承自AbstractCollection类,并实现了List接口中的方法。) - ArrayList基于动态数组实现,内部使用一个数组来存储元素,当数组容量不足时,会进行扩容操作,通常创建一个新的更大的数组,并将原数组的元素复制到新数组中。
- 插入删除性能:
- 倘若在末尾进行插入和删除操作的性能较好
- 但若在中间或开头进行插入删除操作时,需要移动后续元素,性能较差。
- 随机访问性能:支持通过索引进行快速的随机访问,效率较快。
使用
初始化
ArrayList初始化的基本格式如下,
import java.util.ArrayList; // 引入 ArrayList 类ArrayList<ElemType> objectName =new ArrayList<>(); // 初始化
ElemType是数组中对象(元素)的引用类型数据,objectName是数组名字。
(注意注意下文中的Element是ElemType引用类型的基本类型。)
(因为实际ArrayList中的元素是对象,所以需要引用类型)
(String可以像使用基本类型一样,但实际是引用类型)
基本类型 | 引用类型 |
---|---|
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
例如,
import java.util.ArrayList; ArrayList<Integer> arrayList =new ArrayList<>();
避免繁琐后边的代码例子中引入 ArrayList 类就不写了。
add() 添加元素
ArrayList<ElemType> objectName =new ArrayList<>();
objectName.add(ElemType e);
objectName.add(InterPre i, ElemType e);
可以看到,add()函数有两种添加方法,
- 直接在数组的末尾添加元素e;
- 在索引 i 前面添加元素e;
如,
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(0,6);
for(int i : arrayList) System.out.print(i + " ");//这里的for循环迭代是依次得到数组中的元素,后边会讲
//输出:6 1 2 3
remove() 删除元素
ArrayList<ElemType> objectName =new ArrayList<>();
objectName.remove(index i);
作用:删除索引为 i 上的元素,如
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.remove(2);
for(int i : arrayList) System.out.print(i + " ");
//输出:1 2
get() 访问元素
ArrayList<ElemType> objectName =new ArrayList<>();
objectName.get(index i);
作用:返回索引为i处上的元素,如
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
System.out.println(arrayList.get(2));
//输出:3
set() 修改元素
ArrayList<ElemType> objectName =new ArrayList<>();
objectName.set(index i, ElemType e);
作用:将索引为 i 上的元素修改为 e,如
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.set(1,6);
for(int i : arrayList) System.out.print(i + " ");
//输出:1 6 3
size() 元素数量
int ArrayLength = arrayList.size();
作用:**返回数组的长度,**赋值给ArrayLenth。如,
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
System.out.println(arrayList.size());
//输出:3
其余函数
下面就不给出示例代码和输出结果啦,太多了,但是会给出基本格式和用法。
ArrayList<ElemType> arraylist =new ArrayList<>();
- void arraylist.clear() :删除arraylist 中的所有元素
- boolean arraylist.contains(ElemType e) :判断元素e是否在arraylist中,如果在返回true,否则返回false
- int arraylist.indexOf(ElemType e) :返回元素e在arraylist中的索引
- 若重复出现,返回最先的索引值;
- 若不存在,返回-1。
- boolean arraylist.isEmpty() :判断arraylist是否为空,为空返回true,否则返回false
- void arraylist.removeAll() :作用与arraylist.clear()相同,但是arraylist.clear()时间更快。
- void arraylist.sort(): 将数组排序,使用方法这里略过后面详细说明。
- Elem[] arraylist.toArray(Elem[] num) :将arraylist转化为数组赋给num,数组的元素类型为同引用类型的基本类型。
- String arraylist.toString():将arraylist转化为String类型返回。
迭代数组列表
第一种,通过普通for循环迭代,依次输出arraylist中的元素。
ArrayList<ElemType> arraylist = new ArrayList<>();
/*
......
(赋值操作)
*/
for (int i = 0; i < arraylist.size(); i++) System.out.println(arraylist.get(i));
第二种,通过for-each迭代,依次输出arraylist中的元素,也就是上文给出的方式。
ArrayList<ElemType> arraylist = new ArrayList<>();
/*
......
(赋值操作)
*/
for (Element e : arraylist) System.out.println(e);
注意Element是ElemType引用类型的基本类型。
ArrayList排序
借助Collections 类
import java.util.Collections; // 引入 Collections 类Collections.sort(arraylist);
注意Collections.sort()是升序排序(从小到大)。
本身的sort() 方法
arraylist.sort(Comparator c)
Comparator c 的意思是排序方式,分别为升序和降序。
- 升序参数为 Comparator.naturalOrder()
- 降序参数为 Comparator.reverseOrder()
注意要使用这两个参数,需要引入Comparator类。
实例如下,
import java.util.Comparator;arraylist.sort( Comparator.naturalOrder()) ;
//得到数组升序排序的结果(从小到大)
arraylist.sort( Comparator.reverseOrder());
//得到数组降序排序的结果(从大到小)
相关文章:

Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)
List接口 要了解List接口,就不得不说起Java的集合框架。 (该图来自菜鸟教程) Collection接口和Map接口 Java 集合框架主要包括两种类型的容器,集合Collection和图Map。 Collection接口代表了单列集合,它包含了一组…...

顶级开源社区开发者体验实践分享
实践一:开发者贡献指南 实践二:Dev Container Setup(bonus) 实践三:Good First Issues 实践三:Good Second Issues(bonus) 实践四:RFC 机制 实践五:完善 CI I…...

STM32之RTC实时时钟
一、实时时钟概述 1、实时时钟介绍 英文缩写:RTC。显示年、月、日、时、分、秒、星期,自动计算闰年,能够区分每个月的天数。 RTC特点:能从RTC获取到具体的日期时间,断掉后再开机时间仍然准确(需要纽扣电池ÿ…...

Java JVM 堆、栈、方法区详解
目录 1. 栈 2. 堆 3. 方法区 4. 本地方法栈 5. 程序计数器 首先来看一下JVM运行时数据区有哪些。 1. 栈 在介绍JVM栈之前,先了解一下 栈帧 概念。 栈帧:一个栈帧随着一个方法的调用开始而创建,这个方法调用完成而销毁。栈帧内存放者方…...

Oracle篇—分区表和分区索引的介绍和分类(第一篇,总共五篇)
☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…...
Vue中的模式和环境变量
文章目录 一、介绍二、配置1、环境文件2、变量使用 三、读取环境文件 一、介绍 vue官网:https://cli.vuejs.org/zh/guide/mode-and-env.html模式是 Vue CLI 项目中一个重要的概念。默认情况下,一个 Vue CLI 项目有三个模式 开发环境:develop…...

用ChatGPT教学、科研!亚利桑那州立大学与OpenAI合作
亚利桑那州立大学(简称“ASU”)在官网宣布与OpenAI达成技术合作。从2024年2月份开始,为所有学生提供ChatGPT企业版访问权限,主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品,AS…...
问题解决:django模型查询报错,找不到数据库表
django项目,使用的postgresql数据库,建了多个模式,模型查询时一直默认查public的表 1. 问题: django.db.utils.ProgrammingError: relation "ip_management_app.table" does not exist 2. 代码: class …...

持续集成工具Jenkins的使用之安装篇(一)
Jenkins是一个基于Java开发的开源的一种持续集成工具,主要用于环境部署,监控重复性的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。要想使用它,你就必须的先安装,接下来我们就介绍下J…...

【JavaScript】面向后端快速学习 笔记
文章目录 JS是什么?一、JS导入二、数据类型 变量 运算符三、流程控制四、函数五、对象 与 JSON5.1 对象5.2 JSON5.3 常见对象1. 数组2. Boolean对象3. Date对象4. Math5. Number6. String 六、事件6.1 常用方法1. 鼠标事件2. 键盘事件3. 表单事件 6.2 事件的绑定**1…...
笨蛋学设计模式行为型模式-命令模式【19】
行为型模式-命令模式 8.6命令模式8.6.1概念8.6.2场景8.6.3优势 / 劣势8.6.4命令模式可分为8.6.5命令模式8.6.6实战8.6.6.1题目描述8.6.6.2输入描述8.6.6.3输出描述8.6.6.4代码 8.6.7总结 8.6命令模式 8.6.1概念 命令模式允许将请求封装成一个对象(命令对象,包含…...

windows用msvc编译opencv、opencv-python、opencv_contrib、cuda
如要用mingw编译opencv,参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/135741806。 如要用Ubuntu编译opencv,参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/131720128。 一、安装VS2022&…...

JVM实战篇:GC调优
目录 一.GC调优的核心指标 1.1吞吐量(Throughput) 1.2延迟(Latency) 1.3内存使用量 二.GC调优的方法 2.1监控工具 Jstat工具 VisualVm插件 Prometheus Grafana 2.2诊断原因 GC日志 GC Viewer GCeasy 2.3常见的GC模…...

C# 获取QQ会话聊天信息
目录 利用UIAutomation获取QQ会话聊天信息 效果 代码 目前遇到一个问题 其他解决办法 利用UIAutomation获取QQ会话聊天信息 效果 代码 AutomationElement window AutomationElement.FromHandle(get.WindowHwnd); AutomationElement QQMsgList window.FindFirst(Tr…...
Java中的内存溢出与内存泄漏深度解析
目录 引言 一. 内存溢出(Memory Overflow) 1.1 堆内存溢出 1.2 栈内存溢出 1.3 内存溢出的解决策略 1.3.1 优化对象的创建和销毁 1.3.2 调整堆内存大小 1.3.3 使用内存分析工具 1.3.4 避免创建过大的对象 1.3.5 定期清理不再使用的对象 二、…...
计算机网络安全——密码学入门
网络安全是指在网络领域、专业领域的网络安全包括在基础计算机网络基础设施中所做的规定,网络管理员采取的策略来保护网络及网络可访问资源免受未经授权的访问,以及对其有效性(或缺乏)的持续不断的监控和测量的结合。 1. 密码学的…...

go语言(八)---- map
map的声明方式有以下三种。 package mainimport "fmt"func main() {//第一种声明方式//声明map1是一个map类型,key是String,value是Stringvar myMap1 map[string] stringif myMap1 nil {fmt.Println("myMap1 是一个空map")}//在使…...

Flutter:跨平台移动应用开发的未来
Flutter:跨平台移动应用开发的未来 引言 Flutter的背景和概述 Flutter是由Google开发的一个开源UI工具包,用于构建漂亮、快速且高度可定制的移动应用程序。它于2017年首次发布,并迅速引起了开发者们的关注。Flutter采用了一种全新的方法来…...

二维码地址门牌管理系统:智慧城市新篇章
文章目录 前言一、轮播广告位:全面信息传达二、智能化管理:应对挑战三、安全保障:市民隐私优先四、广泛应用:助力城市建设 前言 随着科技的飞速发展,城市的智能化已成不可逆转的趋势。二维码地址门牌管理系统作为新一…...

学习JavaEE的日子 day14 继承,super(),this(),重写
Day14 1.继承的使用 理解:子类继承父类所有的属性和方法 使用场景:多个类似的类,有相同的属性和方法,就可以把相同属性和方法抽取到父类 优点:减少代码的冗余; 使类与类之间产生了关系(多态的前提) 缺点&a…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...