java中ArrayList顺序表的常见操作

news2024/12/27 11:21:57

ArrayList常见操作

1.插入操作

尾插 e

`boolean add(E e)` 

将 e 插入到 index 位置(指定位置插入)

`void add(int index, E element)` 

尾插 c 中的元素(直接插入一个集合)

`boolean addAll(Collection<? extends E> c)` 

将c插入到index位置(插入一个集合)

boolean addAll(int index, Collection<? extends E> c)

如下面这个例子

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        arrayList1.add(1);//尾插入1
        System.out.println(arrayList1);
        arrayList1.add(1, 2);//下标为1为位置插入2
        System.out.println(arrayList1);
        ArrayList<Integer> arrayList2 = new ArrayList<>();
        arrayList2.addAll(arrayList1);//arrayList2尾插arrayList1的全部元素
        System.out.println(arrayList2);
        arrayList2.addAll(1, arrayList1);//从arrayList2下标为2的位置插入arrayList1的全部元素
        System.out.println(arrayList2);
    }
}

2.删除操作

删除 index 位置元素

E remove(int index) 

删除遇到的第一个 o

boolean remove(Object o) 

注意当我们元素类型是Integer时,代码remove(0)会识别将0识别为Int,而不是Integer类型,remove(0)中的这个0会认为是indexd的实参而不是Object实参,所以我们在删除存有Integer类型的元素时,需要进行装箱操作。
例如:

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        arrayList1.add(0);
        arrayList1.add(1);
        arrayList1.add(2);
        System.out.println(arrayList1);
        arrayList1.remove(new Integer(0));
        System.out.println(arrayList1);
        arrayList1.remove(0);
        System.out.println(arrayList1);
    }
}

在这里插入图片描述

3.获取操作

获取下标 index 位置元素

E get(int index) 

例如

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        arrayList1.add(0);
        arrayList1.add(1);
        arrayList1.add(2);
        System.out.println(arrayList1);
        System.out.println(arrayList1.get(0));
    }
}

在这里插入图片描述

4.更新操作

将下标 index 位置元素设置为 element

E set(int index, E element) 
import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        arrayList1.add(0);
        arrayList1.add(1);
        arrayList1.add(2);
        System.out.println(arrayList1);
        System.out.println(arrayList1.set(0,1));
        System.out.println(arrayList1);
    }
}

在这里插入图片描述

5.清空操作

void clear() //清空

例子

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        arrayList1.add(0);
        arrayList1.add(1);
        arrayList1.add(2);
        System.out.println(arrayList1);
        arrayList1.clear();
        System.out.println(arrayList1);
    }
}

在这里插入图片描述

6.其他操作

判断 o 是否在线性表中

boolean contains(Object o) 

返回第一个 o 所在下标

int indexOf(Object o) 

返回最后一个 o 的下标

int lastIndexOf(Object o) 

截取部分 list

List<E> subList(int fromIndex, int toIndex) 

例子

import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        arrayList1.add(0);
        arrayList1.add(1);
        arrayList1.add(0);
        System.out.println(arrayList1);
        System.out.println(arrayList1.contains(new Integer(0)));
        System.out.println(arrayList1.indexOf(new Integer(0)));
        System.out.println(arrayList1.lastIndexOf(new Integer(0)));
        List <Integer> arrayList2 = arrayList1.subList(0, 2);//必须用List类型承接,同时下标范围依旧是左闭右开
        System.out.println(arrayList2);
    }
}

在这里插入图片描述
但是
subList方法需要注意一下,看下面这个代码

import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        arrayList1.add(0);
        arrayList1.add(1);
        arrayList1.add(0);
        System.out.println(arrayList1);
        List <Integer> subList = arrayList1.subList(0, 2);
        System.out.println(subList);
        subList.set(0, 1);//更新subList下标为0的元素值为1
        System.out.println(subList);
        System.out.println(arrayList1);//arrayList下标为0的元素也会变化
    }
}

在这里插入图片描述
这是因为subList与arrayList共用一个value数组,注意subList方法并不是通过copy实现的,所以这不是浅拷贝。

3.3ArrayList的遍历

ArrayList有三种常见的遍历方式
第一种for循环+下标,这就不过多赘述了。
第二种是用for each

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        arrayList1.add(0);
        arrayList1.add(1);
        arrayList1.add(2);
        for (Integer x:arrayList1) {
            System.out.print(x+" ");
        }
    }
}

在这里插入图片描述
第三种是使用迭代器

```java
import java.util.ArrayList;
import java.util.ListIterator;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        arrayList1.add(0);
        arrayList1.add(1);
        arrayList1.add(2);
        for (Integer x:arrayList1) {
            System.out.print(x+" ");
        }
        System.out.println();

        //创建一个arrayList1的迭代器
        ListIterator<Integer> it = arrayList1.listIterator();//it会指向集合受元素的前一个单位的位置
        while(it.hasNext()){//it.hasNext()判断it的下一个位置是否有元素,有返回true,没有返回false
            System.out.print(it.next()+" ");//回去it所指位置的下一个单位位置的元素内容并将next指向下一个元素
            //这个it有点像C里面栈的头指针的含义
        }
    }
}

在这里插入图片描述
关于迭代器,可以去看这篇博客
https://blog.csdn.net/rbx508780/article/details/126980386

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java基础--(一)创建对象在内存中的理解

1、代码 package demo; public class Car {String color;int num;public Car() {}public void run(){System.out.println("color " color);System.out.println("num " num);}public Car(String color, int num) {this.color color;this.num num;} …

2022年美国大学生数学建模竞赛D题数据瘫痪? 使用我们的分析!解题全过程文档及程序

2022年美国大学生数学建模竞赛 D题数据瘫痪? 使用我们的分析! 原题再现&#xff1a; 背景   很多公司将数据视为战略资产&#xff0c;但却很难从中获益。妥善管理这一资源(数据)可以带来竞争优势。因此&#xff0c;公司需要建立一一个集成的数据和分析(D&A) 系统&…

网络中的数据传输模式有哪些-镭速

数据传输模式定义了两个通信设备之间信息流的方向&#xff0c;也称为数据通信或定向模式&#xff0c;同事也规定了信息在计算机网络中从一处流向另一处的方向。 在开放系统互连&#xff08;OSI&#xff09;层模型中&#xff0c;物理层专用于网络中的数据传输。它主要决定数据到…

微信小程序原生开发功能合集十四:登录健权及注册功能实现

本章实现微信自动登录及注册修改功能,包括匿名账号生成、权限自动检测、注册界面及注册流程的实现。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: https://edu.csdn…

1-SpringBoot工程打包后为何执行Java -Jar就能启动?

本文主要分享SpringBoot工程项目如何打包成一个可直接通过java -jar执行的jar&#xff0c;并且简单分析其启动步骤原理。 文章目录 1.SpringBoot如何打包成一个可执行jar&#xff1f;2.SpringBoot打包成的jar为何可以直接Java -jar执行&#xff1f;3.一窥SpringBoot初启动 1.S…

企业直播该如何做?硬件设备、网络环境、设备连接和观看权限等整个直播流程教程

这是一份面向直播新手的企业直播说明教程&#xff0c;字数较多&#xff0c;完整看完&#xff0c;可能会需要求10分钟&#xff0c;建议您可以【收藏】&#xff0c;如果本文章对您有帮助&#xff0c;就帮助【点个赞】吧~~~ 阿酷TONY / 2023-5-12 / 原创文章 / 长沙 / 文章…

今天的CRM系统,还仅仅是一套营销工具吗?

如今&#xff0c;数字化浪潮正席卷全球&#xff0c;数字经济已经成为全球经济未来发展的新动能和新方向。据IDC的预测显示&#xff0c;全球对数字转型的投资将以每年17.1%的复合速度增长&#xff0c;2023年这类投资预计将达到2.3万亿美元。而CRM系统&#xff08;客户关系管理系…

用友NC软件被locked1勒索病毒攻击加密的方式,服务器oracle数据库中了勒索病毒

用友NC软件是一款企业级管理软件&#xff0c;广泛应用于各行各业的集团企业中。然而&#xff0c;最近有关locked1勒索病毒对用友NC软件的攻击已经引起了广泛的关注和担忧。下面将为大家介绍一下有关locked1攻击加密用友NC软件的方式&#xff0c;并给出合理的解决方案。 首先&a…

Kafka 之生产者与消费者基础知识:基本配置、拦截器、序列化、分区器

一、配置 1. 必须要配置的参数&#xff1a; kafaf集群地址列表&#xff1a;理论上写一个节点地址&#xff0c;就相当于绑定了整个kafka集群了&#xff0c;但是建议多写几个&#xff0c;如果只写一个&#xff0c;万一宕机就麻烦了kafka消息的key和value要指定序列化方法kafka对…

2023年湖北省建设厅特种作业操作证报名条件是什么?

建筑施工特种作业人员是指在房屋建筑和市政工程施工活动中&#xff0c;从事可能对本人、他人及周围设备设施的安全造成重大危害作业的人员。建筑施工特种作业人员必须经建设主管部门考核合格&#xff0c;取得建筑施工特种作业人员操作资格证书&#xff08;以下简称“资格证书”…

零代码基础,一分钟教你快速搭建微信 ChatGPT 机器人

零代码基础,一分钟教你快速搭建微信 ChatGPT 机器人 1.注册 Railway 账号:2.部署3. 配置1)点击 Configure2)选择仓库地址3)点击安装4)配置信息如下图:5)部署:deploy6)部署完成:7)微信扫码登录8) 根据需要修改配置:最后总结:效果预览:致谢开源项目:本教程收集于…

U盘分区合并的方法有哪些?

大多数用户在硬盘的使用中会进行分区操作&#xff0c;同时为了方便整理&#xff0c;部分用户也会选择给自己的U盘分区&#xff0c;可是在后续操作中发现U盘分区没有什么用处&#xff0c;因此就想要重新将其合并&#xff0c;但要把分区重新合并没那么容易&#xff0c;那么U盘被分…

笔试练习Day02

一.选择题&#xff1a; 1.A 派生出子类 B &#xff0c; B 派生出子类 C &#xff0c;并且在 java 源代码有如下声明&#xff1a; 1. A a0new A(); 2. A a1new B(); 3. A a2new C(); 问以下哪个说法是正确的&#xff08;&#xff09; A 只有第一行能通过编译 B 第1、2行能通过编…

mysql distinct 和 group by 去重

标题mysql distinct 和 group by 去重 一、先说结论&#xff1a; MySQL中常用去重复数据的方法是使用 distinct 或者 group by group by 分组后&#xff0c;如果没有对分组后的数据进行操作&#xff0c;如使用聚合函数/分组函数&#xff1a;count、sum、avg、max 、min&…

封装Python脚本:使用pymysql+sshtunnel,支持通过SSH隧道方式链接mysql数据库

一、前言 通常为了保证数据库安全&#xff0c;不会允许直接连接数据库&#xff0c;而是需要通过SSH隧道去连接服务器背后的数据库&#xff1b;通过Navicat操作如下&#xff1a; 二、python封装脚本 # -*- coding: utf-8 -*- # Time : 2023/5/12 11:04 # Author : chen…

Activity内存泄漏时包含的view还有没有的救?

Activity泄漏会导致该Activity引用到的Bitmap、DrawingCache等无法释放&#xff0c;对内存造成大的压力&#xff0c;兜底回收是指对于已泄漏Activity&#xff0c;尝试回收其持有的资源&#xff0c;泄漏的仅仅是一个Activity空壳&#xff0c;从而降低对内存的压力。 做法也非常简…

ssh终端工具推荐-WindTerm

什么是WindTerm 官方github https://github.com/kingToolbox/WindTerm A Quicker and better SSH/Telnet/Serial/Shell/Sftp client for DevOps. 按官方说明&#xff0c;WindTerm是一个更快更好的SSH/Telnet/Serial/Shell/Sftp的DevOps工具。 WindTerm目前对商业是免费无限制…

QML APP开发套路(二):前/后端交互概述

&#xff08;1&#xff09;QML开发简介 Qt应用框架在传统UI&#xff08;QWidget窗体&#xff09;的基础上&#xff0c;提供了Qt Quick模块&#xff0c;该模块基于 QML 语言来定义UI及交互方式。区别于 QWidget 定义UI的方式&#xff0c;QML利于将UI交互与业务逻辑处理剥离成前…

什么是智慧校园?

什么是智慧校园&#xff1f; 智慧校园平台是目前教育信息化领域的热点之一。 随着数字化转型的加速&#xff0c;越来越多的学校开始寻求解决方案&#xff0c;以提高教育管理的效率和质量。 在使用智慧校园平台的过程中&#xff0c;一些痛点问题也浮现出来。为解决这些问题&a…

基于AT89C51单片机的贪吃蛇游戏设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87778030 源码获取 主要内容: 设计一个贪吃蛇游戏,使其具有以下游戏规则:①当没有改变方向时,贪吃蛇沿原来路径一直前进②贪吃蛇无法回头,只能异于当前方向改变行动③蛇…