详解java中ArrayList

news2025/4/16 20:04:09

目录

前言

一、ArrayList是什么

 二、ArrayList使用

1、ArrayList的构造

2 、ArrayList常见操作

3、 ArrayList的遍历

4、 ArrayList的扩容机制

三、来个练习

前言

        当你看到这篇文章我觉得很好笑,因为我开始也不懂ArrayList现在轮到你了,嘻嘻嘻,但是没关系我教你,action!!!

一、ArrayList是什么

通俗点讲ArrayList就是数组

文字解答:ArrayList属于List,List是线性表,线性表有顺序表、链表、栈、队列...,而ArrayList底层代码就是顺序表(数组)

代码解答(重点):

public class MyArrayList {

    public int[] elem;//数组
    public int usedSize;
    // 默认的容量
    public static final int DEFAULT_CAPACITY = 5;
    public MyArrayList() {
        elem = new int[DEFAULT_CAPACITY];//数组初始化
    }

你可能感觉很奇怪,ArrayList底层既然是数组,那为什么不直接写成数组的形式呢,比如这样 

int [] ArrayList={1,2,3};

亦或者是这样:

int [] ArrayList=new int []{1,2,3};

我只能说你对数组的定义没忘,hahaha 

  • 不卖关子了,如果我们这样定义,那好我问你
  • 如果我们想在数组中添加任意类型的元素怎末办?数组在一开始就要定义数组中元素类型了
  • 如果我们想动态的改变数组大小怎么办?
  • 如果我想在数组最后添加元素,普通数组你需要找到数组大小后添加,没有直接的函数,繁琐
  • .....

 二、ArrayList使用

1、ArrayList的构造

第一种方法:

// ArrayList创建,推荐写法
// 构造一个空的列表
List<Integer> list1 = new ArrayList<>();

第二种方法:

// list2构造好之后,与list1中的元素拼接,list1元素插入到了list2后面
ArrayList<Integer> list2 = new ArrayList<>(list1);

特别注意:ArrayList(Collection<? extends E> c) 的意思是new ArrayList<>(list1);小括号内对象的类型必须是继承了Collection,上述list1的类型是List满足这一条件;其次list1的<>必须是现在<>的类型的子类或者相同关系 ,c是定义的变量。

第三种方法:

// 构造一个具有10个容量的列表
List<Integer> list3 = new ArrayList<>(10);
list3.add(1);
list3.add(2);
list3.add(3);
// list3.add("hello"); // 编译失败,List<Integer>已经限定了,list2中只能存储整形元素

2 、ArrayList常见操作

代码解释:

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("JavaSE");
    list.add("JavaWeb");
    list.add("JavaEE");
    list.add("JVM");
    list.add("测试课程");
    System.out.println(list);
    // 获取list中有效元素个数
    System.out.println(list.size());
    // 获取和设置index位置上的元素,注意index必须介于[0, size)间
    System.out.println(list.get(1));
    list.set(1, "JavaWEB");
    System.out.println(list.get(1));
    // 在list的index位置插入指定元素,index及后续的元素统一往后搬移一个位置
    list.add(1, "Java数据结构");
    System.out.println(list);
    // 删除指定元素,找到了就删除,该元素之后的元素统一往前搬移一个位置
    list.remove("JVM");
    System.out.println(list);
    // 删除list中index位置上的元素,注意index不要超过list中有效元素数,否则会抛出下标越界异常   
    list.remove(list.size()-1);
    System.out.println(list);

    if(list.contains("测试课程")){
    list.add("测试课程");
    }
    // 查找指定元素第一次出现的位置:indexOf从前往后找,lastIndexOf从后往前找
    list.add("JavaSE");
    System.out.println(list.indexOf("JavaSE"));
    System.out.println(list.lastIndexOf("JavaSE"));
    // 使用list中[0, 4)之间的元素构成一个新的SubList返回,但是和ArrayList共用一个elementData 
       //数组

    List<String> ret = list.subList(0, 4);
    System.out.println(ret);
    list.clear();
    System.out.println(list.size());
    }

3、 ArrayList的遍历

ArrayList 可以使用三方方式遍历: for 循环 + 下标、 foreach 、使用迭代器
public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    // 使用下标+for遍历
    for (int i = 0; i < list.size(); i++) {
    System.out.print(list.get(i) + " ");
    }
    System.out.println();
    // 借助foreach遍历
    for (Integer integer : list) {
    System.out.print(integer + " ");
    }
    System.out.println();
    //使用迭代器
    Iterator<Integer> it = list.listIterator();
    while(it.hasNext()){
    System.out.print(it.next() + " ");
    }
    System.out.println();
}
注意:ArrayList 最长使用的遍历方式是: for 循环 + 下标 以及 foreach

4、 ArrayList的扩容机制

当空间不够时需要扩容,比如:

public void add(int data){
    if(usedSize == elem.length)//usedSize数组中元素个数
        elem=Arrays.copyof(elem,2*elem.length);
    elem[usedSize]=data;
    usedSize++;
}

三、来个练习

解答:
public static List<List<Integer>> generate(int numRows) {
        //建立一个二维数组存储杨辉三角
        List<List<Integer>> mylist = new ArrayList<>();//建立第一维数组
        for (int i = 0; i < numRows; i++) {
            mylist.add(new ArrayList<>());//建立第二维数组
        }
        for (int i = 0; i < numRows; i++) {
            for (int j = 0; j <= i; j++) {
                //每行第一个和最后一个都是1
                if (j == 0 || j == i) mylist.get(i).add(1);
                    //中间行插入值
                else {
                    mylist.get(i).add(mylist.get(i - 1).get(j) + mylist.get(i - 1).get(j - 1));
                }
            }
            System.out.println();
        }
        return mylist;
    }

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

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

相关文章

深入解析HubSpot在线客户互动工具:提升客户体验的利器

在数字化时代&#xff0c;客户体验成为企业成功的关键因素之一。HubSpot作为一体化的市场营销、销售和服务平台&#xff0c;其在线客户互动工具扮演着提升客户体验的重要角色。本文将深入探讨HubSpot的在线客户互动工具&#xff0c;包括实时聊天、机器人和社交媒体监控&#xf…

视频号的视频怎么提取?推荐2种方法让广告人下载高清原视频变得更轻松

​在当今这个视觉主导的时代&#xff0c;身为一名广告人&#xff0c;您是否经常还在烦恼视频号的视频怎么提取&#xff1f;并能快速、高效地下载到高质量的原视频素材而头疼呢&#xff1f; 视频号提取助手 现在&#xff0c;问题有了答案——"视频号提取助手"这款神…

【K8S 存储卷】K8S的存储卷+PV/PVC

目录 一、K8S的存储卷 1、概念&#xff1a; 2、挂载的方式&#xff1a; 2.1、emptyDir&#xff1a; 2.2、hostPath&#xff1a; 2.3、NFS共享存储&#xff1a; 二、PV和PVC&#xff1a; 1、概念 2、请求方式 3、静态请求流程图&#xff1a; 4、PV和PVC的生命周期 5、…

怎样无货源开网店?2024抖店最新开通和运营教程,小白必看!

我是王路飞。 无货源模式因为对货源没有要求&#xff0c;也算是新手小白入局电商平台唯一的模式选择了。 那么怎么开通无货源网店呢&#xff1f;以抖店举例。 2024抖店最新的开通和运营教程分享如下&#xff0c;小白必看&#xff01; 内容来源于【醒醒团队-电商王路飞】 无…

如何正确选择ESD保护二极管

ESD保护二极管是一种齐纳二极管&#xff0c;专门用来保护电路免受过压浪涌&#xff0c;特别是静电放电&#xff08;ESD&#xff09;事件的影响。 当二极管反向偏置时&#xff0c;有很少的电流从阴极流向阳极。然而&#xff0c;当反向偏压超过某一点&#xff08;称为反向击穿电压…

【动态规划】【 数学】C++算法:514自由之路

作者推荐 【动态规划】458:可怜的小猪 涉及知识点 动态规划 数学 力扣514 自由之路 电子游戏“辐射4”中&#xff0c;任务 “通向自由” 要求玩家到达名为 “Freedom Trail Ring” 的金属表盘&#xff0c;并使用表盘拼写特定关键词才能开门。 给定一个字符串 ring &#x…

APP备案流程

一、 APP备案是指 自2000年起&#xff0c;依据《互联网信息服务管理办法》(国务院令第292号)规定&#xff0c;电信主管部门对从事互联网信息服务的网站开展备案核准工作(即ICP备案)。经过20多年的持续优化完善&#xff0c;已形成“电信主管部门-网络接入服务提供者-互联网信息…

八. 实战:CUDA-BEVFusion部署分析-spconv原理

目录 前言0. 简述1. 举例分析spconv的计算流程2. 导出带有spconv网络的onnx需要考虑的事情总结下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第八章——实战&a…

JavaWeb- Tomcat

一、概念 老规矩&#xff0c;先看维基百科&#xff1a;Apache Tomcat (called "Tomcat" for short) is a free and open-source implementation of the Jakarta Servlet, Jakarta Expression Language, and WebSocket technologies.[2] It provides a "pure Ja…

什么是广告联盟?国内哪些广告联盟?广告联盟如何赚取收益?

开发者想要对接广告联盟获得广告变现收益&#xff0c;就要了解广告联盟的优势&#xff0c;以及广告联盟是如何获取收益的。 一、什么是广告联盟&#xff1f; 广告联盟是一种在线广告服务模式&#xff0c;将广告主和流量主联系在一起。通过广告联盟平台的技术服务&#xff0c;…

自动驾驶HWP的功能定义

一、功能定义 高速路自动驾驶功能HWP是指在一般畅通高速公路或城市快速路上驾驶员可以放开双手双脚&#xff0c;同时注意力可在较长时间内从驾驶环境中转移&#xff0c;做一些诸如看手机、接电话、看风景等活动&#xff0c;该系统最低工作速度为60kph。 如上两种不同环境和速度…

c++基础 易道云笔记

c基础语法 编程快捷操作使用方法 反汇编&#xff1a; 先设置一个断点&#xff0c;调试后&#xff0c;在调试菜单中选择窗口&#xff0c;选择反汇编 **单词替换&#xff1a;**先按下ctrlf查找&#xff0c;再替换 基础知识辨析 1.数组指针 int &#xff08;*ptest)[5] {} //该…

sqlilabs第四十九五十关

Less-49(GET - Error based - String Bind - ORDER BY CLAUSE) 手工注入 无回显(还是单引号闭合)&#xff0c;只能使用延时注入 自动脚本 和上一关一样 Less-50(GET - Error based - ORDER BY CLAUSE -numeric- Stacked injection) 手工注入 这里需要使用堆叠注入的思路 自…

React07-路由管理器react-router-dom(v6)

react-router 是一个流行的用于 React 应用程序路由的库。它使我们能够轻松定义应用程序的路由&#xff0c;并将它们映射到特定的组件&#xff0c;这样可以很容易地创建复杂的单页面应用&#xff0c;并管理应用程序的不同视图。 react-router 是基于 React 构建的&#xff0c;…

谈谈Spring Bean

一、IoC 容器 IoC 容器是 Spring 的核心&#xff0c;Spring 通过 IoC 容器来管理对象的实例化和初始化&#xff08;这些对象就是 Spring Bean&#xff09;&#xff0c;以及对象从创建到销毁的整个生命周期。也就是管理对象和依赖&#xff0c;以及依赖的注入等等。 Spring 提供…

重学MySQL之关系型数据库和非关系型数据库

1 关系型数据库 1.1 关系型数据库的特性 1.1.1 事务的特性 事务&#xff0c;是指一个操作序列&#xff0c;这些操作要么都执行&#xff0c;或者都不执行&#xff0c;而且这一序列是无法分隔的独立操作单位。也就是符合原子性&#xff08;Atomicity&#xff09;、 一致性&…

C语言——结构体类型(二)【结构体内存对齐,结构体数组】

&#x1f4dd;前言&#xff1a; 上一讲结构体类型&#xff08;一&#xff09;中&#xff0c;我们讲述了有关结构体定义&#xff0c;创建&#xff0c;初始化和引用的内容&#xff0c;这一讲&#xff0c;我们进一步学习结构体的相关知识&#xff1a; 1&#xff0c;结构体内存对齐…

Delphi 11.3配置android环境

电脑安装dephi11.3的时候&#xff0c;勾选android sdk&#xff0c;但是软件安装好以后&#xff0c;还有问题 在Delphi—tool —options 里边&#xff0c;Deployment下SDKManager 中&#xff0c;看到SDk里边的感叹号&#xff0c;说明android sdk没有安装好 解决方法有2种 第一种…

MySQL从0到1全教程【1】MySQL数据库的基本概念以及MySQL8.0版本的部署

1 MySQL数据库的相关概念 1.1 数据库中的专业术语 1.1.1 数据库 (DB) 数据库是指:保存有组织的数据的容器(通常是一个文数据库 (database)件或一组文件)。 1.1.2 数据库管理系统 (DBMS) 数据库管理系统(DBMS)又称为数据库软件(产品)&#xff0c;用于管理DB中的数据 注意:…

小H靶场笔记:Empire-Breakout

Empire&#xff1a;Breakout January 11, 2024 11:54 AM Tags&#xff1a;brainfuck编码&#xff1b;tar解压变更目录权限&#xff1b;Webmin&#xff1b;Usermin Owner&#xff1a;只惠摸鱼 信息收集 使用arp-scan和namp扫描C段存活主机&#xff0c;探测靶机ip&#xff1a;1…