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…...
【等保三级Java安全加固实战指南】:20年专家亲授7大高危漏洞修复清单与合规落地路径
第一章:等保三级Java安全加固的合规基线与实施全景图等保三级对Java应用系统提出了覆盖身份鉴别、访问控制、安全审计、通信保密性、代码安全及运行环境防护等多维度强制性要求。其合规基线并非单一技术点的叠加,而是以《GB/T 22239-2019 信息安全技术 网…...
别再用asyncio硬扛高并发了!无GIL环境下Python原生多线程性能翻倍的6个核心调优参数
第一章:Python无锁GIL环境下的并发模型演进全景Python长期以来受全局解释器锁(GIL)制约,导致多线程无法真正并行执行CPU密集型任务。近年来,随着CPython 3.12正式引入实验性“无GIL构建选项”(--without-py…...
PasteMD体验报告:极简界面+强大功能,这才是生产力工具该有的样子
PasteMD体验报告:极简界面强大功能,这才是生产力工具该有的样子 1. 重新定义"文本整理":当AI成为你的第二大脑 每天,我们都在与各种杂乱文本搏斗:会议速记、技术日志、网页摘录、临时灵感...这些内容往往以…...
Pixel Epic · Wisdom Terminal保姆级教程:备份与恢复研报工程文件全指南
Pixel Epic Wisdom Terminal保姆级教程:备份与恢复研报工程文件全指南 1. 引言:为什么需要备份研报工程文件 在Pixel Epic Wisdom Terminal中,每一份研究报告都是你与AI贤者共同创造的智慧结晶。就像RPG游戏中的存档点一样,定…...
【Python内存管理终极指南】:20年专家实测5大智能策略,90%开发者忽略的GC优化盲区揭晓
第一章:Python智能体内存管理策略对比评测报告全景概览本报告聚焦于当前主流Python智能体(Agent)框架在内存管理层面的设计差异与运行表现,涵盖LangChain、LlamaIndex、AutoGen及自研轻量Agent Runtime四大实现。评测维度包括对象…...
2026年高压电磁阀制造厂大比拼:哪家更值得信赖?
在工业领域,高压电磁阀是许多关键系统的核心部件,其性能和可靠性直接关系到整个系统的稳定性和安全性。随着技术的不断进步和市场需求的多样化,选择一家值得信赖的高压电磁阀制造厂变得尤为重要。本文将从多个维度对比分析几家主流高压电磁阀…...
告别僵硬数字人:用InfiniteTalk V2的WebUI,让照片开口唱歌(保姆级参数设置指南)
告别僵硬数字人:用InfiniteTalk V2的WebUI,让照片开口唱歌(保姆级参数设置指南) 当一张静态照片突然流畅地唱起你上传的歌曲,嘴角弧度与歌词节奏完美匹配,甚至伴随旋律自然摆动头部——这种魔法般的体验&am…...
多设备协同效率低?用QtScrcpy实现跨平台Android投屏与批量管理
多设备协同效率低?用QtScrcpy实现跨平台Android投屏与批量管理 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/Q…...
RMBG-2.0与LangChain集成:智能内容生成系统搭建
RMBG-2.0与LangChain集成:智能内容生成系统搭建 1. 引言 你有没有遇到过这样的情况:做电商需要批量处理商品图片,做新媒体需要快速生成内容素材,做设计需要智能抠图换背景?传统方法要么费时费力,要么效果…...
从零上手FinalShell:Windows环境下的高效SSH连接与服务器管理实战
1. FinalShell是什么?为什么选择它? 如果你是Windows用户,第一次接触服务器管理,可能会被各种专业工具吓到。XShell虽然强大但收费,Putty又太简陋,这时候FinalShell就像个贴心的助手。我用了三年多…...
