当前位置: 首页 > 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…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...