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

Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)

List接口

要了解List接口,就不得不说起Java的集合框架。
Java集合框架图(来自菜鸟教程)
(该图来自菜鸟教程)

Collection接口和Map接口

Java 集合框架主要包括两种类型的容器,集合Collection和图Map。

  • Collection接口代表了单列集合,它包含了一组Object元素,每个元素都有一个值。
    (这里有个“泛型擦除”的概念,在此不提及有兴趣可自行了解)
  • Map接口代表了双列集合,它包含了一组键值对,每个键值对包含两个值,一个是键,一个是对应的值。

List

Collection 接口又有 3 种子类型,List、Set 和 Queue。

  • List 接口存储一组不唯一,有序(插入顺序)的对象。
    1. 不唯一:允许存储重复的元素。
    2. 有序:可以精准控制元素添加的位置,因此可以根据索引访问元素。
    3. <实现类有ArrayList,LinkedList,Vector> 。
  • Set 接口存储一组唯一,无序的对象。
    1. 唯一:元素不允许重复。
    2. 无序:没有定义顺序,元素的存储顺序可能与添加顺序不同。
  • Queue接口:一个先进先出(FIFO)的集合,通常用于模拟队列数据结构。

静态数组

概念

  1. 是一种线性数据结构。
  2. 相同类型的元素存储在连续的内存空间中。

初始化

java中两种创建静态数组的形式如下,

 int[] array = new int[5];  // { 0, 0, 0, 0, 0 } int[] iarray = { 1, 2, 3, 5, 4 }; 
    • 第一行代码创建了一个名叫array的数组,长度大小为5,并且数组的长度大小不能改变
    • 注释的意思是,java会自动给数组内的元素赋值为默认值,即int型的默认值0。
  1. 第二行代码创建了一个名叫iarray的数组,长度大小为5,并且长度大小也无法改变,且编写者主动赋值为一到五的数字。

ArrayList类

ArrayList类相关图(来自于菜鸟教程)

概念和性质

  • ArrayList 继承了 AbstractList类 ,并实现了 List 接口
    (AbstractList是List接口的抽象实现类,它继承自AbstractCollection类,并实现了List接口中的方法。)
  • ArrayList基于动态数组实现,内部使用一个数组来存储元素,当数组容量不足时,会进行扩容操作,通常创建一个新的更大的数组,并将原数组的元素复制到新数组中。
  • 插入删除性能
    1. 倘若在末尾进行插入和删除操作的性能较好
    2. 但若在中间或开头进行插入删除操作时,需要移动后续元素,性能较差。
  • 随机访问性能支持通过索引进行快速的随机访问,效率较快。

使用

初始化

ArrayList初始化的基本格式如下,

import java.util.ArrayList; // 引入 ArrayList 类ArrayList<ElemType> objectName =new ArrayList<>();  // 初始化

ElemType是数组中对象(元素)的引用类型数据,objectName是数组名字。
(注意注意下文中的Element是ElemType引用类型的基本类型。)


(因为实际ArrayList中的元素是对象,所以需要引用类型)
(String可以像使用基本类型一样,但实际是引用类型)

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

例如,

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接口&#xff0c;就不得不说起Java的集合框架。 &#xff08;该图来自菜鸟教程&#xff09; Collection接口和Map接口 Java 集合框架主要包括两种类型的容器&#xff0c;集合Collection和图Map。 Collection接口代表了单列集合&#xff0c;它包含了一组…...

顶级开源社区开发者体验实践分享

实践一&#xff1a;开发者贡献指南 实践二&#xff1a;Dev Container Setup&#xff08;bonus&#xff09; 实践三&#xff1a;Good First Issues 实践三&#xff1a;Good Second Issues&#xff08;bonus&#xff09; 实践四&#xff1a;RFC 机制 实践五&#xff1a;完善 CI I…...

STM32之RTC实时时钟

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

Java JVM 堆、栈、方法区详解

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

Oracle篇—分区表和分区索引的介绍和分类(第一篇,总共五篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…...

Vue中的模式和环境变量

文章目录 一、介绍二、配置1、环境文件2、变量使用 三、读取环境文件 一、介绍 vue官网&#xff1a;https://cli.vuejs.org/zh/guide/mode-and-env.html模式是 Vue CLI 项目中一个重要的概念。默认情况下&#xff0c;一个 Vue CLI 项目有三个模式 开发环境&#xff1a;develop…...

用ChatGPT教学、科研!亚利桑那州立大学与OpenAI合作

亚利桑那州立大学&#xff08;简称“ASU”&#xff09;在官网宣布与OpenAI达成技术合作。从2024年2月份开始&#xff0c;为所有学生提供ChatGPT企业版访问权限&#xff0c;主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品&#xff0c;AS…...

问题解决:django模型查询报错,找不到数据库表

django项目&#xff0c;使用的postgresql数据库&#xff0c;建了多个模式&#xff0c;模型查询时一直默认查public的表 1. 问题&#xff1a; django.db.utils.ProgrammingError: relation "ip_management_app.table" does not exist 2. 代码&#xff1a; class …...

持续集成工具Jenkins的使用之安装篇(一)

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

【JavaScript】面向后端快速学习 笔记

文章目录 JS是什么&#xff1f;一、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概念 ​ 命令模式允许将请求封装成一个对象(命令对象&#xff0c;包含…...

windows用msvc编译opencv、opencv-python、opencv_contrib、cuda

如要用mingw编译opencv&#xff0c;参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/135741806。 如要用Ubuntu编译opencv&#xff0c;参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/131720128。 一、安装VS2022&…...

JVM实战篇:GC调优

目录 一.GC调优的核心指标 1.1吞吐量&#xff08;Throughput&#xff09; 1.2延迟&#xff08;Latency&#xff09; 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中的内存溢出与内存泄漏深度解析

目录 引言 一. 内存溢出&#xff08;Memory Overflow&#xff09; 1.1 堆内存溢出 1.2 栈内存溢出 1.3 内存溢出的解决策略 1.3.1 优化对象的创建和销毁 1.3.2 调整堆内存大小 1.3.3 使用内存分析工具 1.3.4 避免创建过大的对象 1.3.5 定期清理不再使用的对象 二、…...

计算机网络安全——密码学入门

网络安全是指在网络领域、专业领域的网络安全包括在基础计算机网络基础设施中所做的规定&#xff0c;网络管理员采取的策略来保护网络及网络可访问资源免受未经授权的访问&#xff0c;以及对其有效性&#xff08;或缺乏&#xff09;的持续不断的监控和测量的结合。 1. 密码学的…...

go语言(八)---- map

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

Flutter:跨平台移动应用开发的未来

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

二维码地址门牌管理系统:智慧城市新篇章

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

学习JavaEE的日子 day14 继承,super(),this(),重写

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

PyTorch 2.8镜像一键部署教程:支持Slurm集群调度的HPC环境快速接入

PyTorch 2.8镜像一键部署教程&#xff1a;支持Slurm集群调度的HPC环境快速接入 1. 镜像概述与核心优势 PyTorch 2.8深度学习镜像是一个经过深度优化的高性能计算环境&#xff0c;专为现代AI工作负载设计。这个预配置环境最大的特点是开箱即用&#xff0c;免去了繁琐的环境配置…...

Pixel Couplet Gen实操手册:自定义门神像素图替换与SVG动画扩展方法

Pixel Couplet Gen实操手册&#xff1a;自定义门神像素图替换与SVG动画扩展方法 1. 项目概述 Pixel Couplet Gen是一款融合传统春节元素与现代像素艺术风格的AI春联生成工具。通过ModelScope大模型的文本生成能力&#xff0c;结合精心设计的8-bit视觉风格&#xff0c;为用户提…...

Graphormer部署案例:中小企业AI药物研发团队低成本GPU算力部署方案

Graphormer部署案例&#xff1a;中小企业AI药物研发团队低成本GPU算力部署方案 1. 项目背景与价值 在药物研发领域&#xff0c;分子属性预测是核心环节之一。传统实验方法成本高昂且周期漫长&#xff0c;而Graphormer作为基于纯Transformer架构的图神经网络&#xff0c;为这一…...

何时DCDC预降压+LDO二次线性稳压?

LDO 核心选型分界结论及优化要点核心选型分界结论以LDO输入输出压差ΔV为核心判断指标&#xff0c;结合输出功率、场景约束&#xff0c;通用选型规则如下&#xff1a;通用强制分界点&#xff1a;当ΔV≥2V&#xff0c;且输出功率≥100mW&#xff08;对应你之前的5V转3V70mA工况…...

CasRel在智能问答系统中的落地实践:为QA引擎注入结构化事实支撑

CasRel在智能问答系统中的落地实践&#xff1a;为QA引擎注入结构化事实支撑 1. 引言&#xff1a;当问答系统遇到关系抽取 想象一下这样的场景&#xff1a;用户向智能问答系统提问"苹果公司的CEO是谁&#xff1f;"&#xff0c;系统需要快速准确地回答"蒂姆库克…...

车载Android Auto兼容性开发全链路(车规级Java SDK集成手册)

第一章&#xff1a;车载Android Auto兼容性开发全链路概览Android Auto 是 Google 提供的车载信息娱乐系统集成框架&#xff0c;其兼容性开发并非仅限于应用层适配&#xff0c;而是一条横跨设备端、车机系统、认证流程与用户交互的完整技术链路。开发者需同步关注 Android 应用…...

Scarab:让空洞骑士模组管理变得如此简单

Scarab&#xff1a;让空洞骑士模组管理变得如此简单 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 你是否曾经因为空洞骑士模组安装的复杂流程而头疼&#xff1f;是否在寻找依…...

保姆级教程:手把手教你用GLM-4v-9b搭建图片问答机器人

保姆级教程&#xff1a;手把手教你用GLM-4v-9b搭建图片问答机器人 你是不是经常遇到这样的情况&#xff1a;看到一张复杂的图表&#xff0c;想快速了解里面的数据含义&#xff1b;或者收到一张产品图&#xff0c;想知道它的具体型号和功能&#xff1b;又或者辅导孩子作业时&am…...

MCP 会不会成为 AI 系统的“新中间件”?

一、为什么人们开始把 MCP 和“中间件”类比&#xff1f;&#xff08;Why Do People Start Comparing MCP to “Middleware”?&#xff09;1、MCP 出现的位置非常“熟悉”&#xff08;MCP Appears in a Very Familiar Position&#xff09;当人们第一次在企业架构中引入 MCP 时…...

STM32水质监测系统开发与物联网应用

1. 项目概述 作为一名嵌入式开发工程师&#xff0c;我最近完成了一个基于STM32的河流水质监测系统项目。这个系统能够实时检测水体的PH值、电导率和浊度等关键参数&#xff0c;并通过物联网技术实现远程监控和自动调节功能。在实际应用中&#xff0c;我发现这套系统特别适合用于…...