详解java中ArrayList

news/2024/7/27 8:22:12/文章来源:https://blog.csdn.net/weixin_54783024/article/details/135529271

目录

前言

一、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++) {//每行第一个和最后一个都是1if (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.luyixian.cn/news_show_925456.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GRE隧道(初级VPN)配置步骤

一、拓朴图&#xff1a; 要求&#xff1a;1、PC1 和 PC2 能访问充当互联网接口地址的ISP环回口地址8.8.8.8 2、PC1 和 PC2 走GRE隧道互通 二、配置步骤&#xff1a; 1、配置IP 2、R1、R2 配置nat&#xff0c;代理内网地址通过G0/0/0口上外网 acl 2000rule permit source a…

Nginx配置负载均衡实例

Nginx配置反向代理实例二 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 负载均衡实例实现的效果 浏览器地址栏输入地址http://192.168.0.101/test/a.html&#xff0c;刷新页面进行多次请求&#xff0c;负载均衡效果&#xff0c;平均分配到8080端口服务和8…

iOS解决内存泄漏工具

在iOS应用中&#xff0c;有一些工具和技术可以帮助识别和解决内存泄漏问题。以下是一些常用的工具&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Instruments&#xff1a; Instruments 是Xcode中…

分布式搜索引擎--认识

elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 。 elasticsearch结合kibana、Logstash、Beats&#xff0c;也就是elastic stack&#xff08;ELK&#xff09;。被广泛…

行为型设计模式——备忘录模式

备忘录模式 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定的历史步骤&#xff0c;当新的状态无效或者存在问题时&#xff0c;可以使用暂时存储起来的备忘录将状态复原&#xff0c;很多软件都提供了撤销&#xff08;Undo&#xff09;操作…

使用mamba替换conda和anaconda配置环境安装软件

使用mamba替换miniconda和anaconda&#xff0c;原因是速度更快&#xff0c;无论是创建新环境还是激活环境 conda、mamba、anaconda都是蟒蛇的意思… 下载mambaforge wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh ba…

基于Matlab/Simulink开发自动驾驶的解决方案

文章目录 处理自动驾驶数据 仿真自动驾驶场景 设计感知算法 设计规划和控制算法 生成代码和部署算法 集成和测试 参考文献 使用 MATLAB/Simulink开发自动驾驶&#xff0c;能够深入建模真实世界的行为、减少车辆测试并验证嵌入式软件的功能&#xff0c;从而推进自动驾驶感…

Mybatis 常用条件语句,大于小于、if、for、模糊搜索、case when、choose

大于小于 方法1&#xff1a; > 大于 &#xff0c; < 小于 <if test"startTime ! null ">and a.create_time > #{startTime} </if> <if test"endTime ! null ">and a.create_time < #{endTime} </if> 方法2(建议写这…

java每日一题——ATM系统编写(答案及编程思路)

前言&#xff1a; 基础语句学完&#xff0c;也可以编写一些像样的程序了&#xff0c;现在要做的是多加练习&#xff0c;巩固下知识点&#xff0c;打好基础&#xff0c;daydayup! 题目&#xff1a;模仿银行ATM系统&#xff0c;可以创建用户&#xff0c;存钱&#xff0c;转账&…

一、MySQL 卸载

目录 1、软件的卸载准备 2、软件的卸载 方式一&#xff1a;通过控制面板卸载 方式二&#xff1a;通过mysql8的安装向导卸载 1、双击mysql8的安装向导 2、取消更新 3、选择要卸载的mysql服务器软件的具体版本 4、确认删除数据目录 5、执行删除 6、完成删除 3、清理残…

半小时实现GPT纯血鸿蒙版

仅需半小时&#xff0c;即可实现纯血鸿蒙版本的ChatGPT&#xff01; 废话少说&#xff0c;先看效果图&#xff1a; 如上图所示&#xff0c;这个小Demo实现了AI智能问答。靠右加粗的文本是用户点击底部提交按钮后出现的&#xff1b;后面靠左对齐的普通文本是来自AI的回答内容。当…

鸿蒙(HarmonyOS)应用开发指南

1. 概述 1.1 简介 鸿蒙&#xff08;即 HarmonyOS &#xff0c;开发代号 Ark&#xff0c;正式名称为华为终端鸿蒙智能设备操作系统软件&#xff09;是华为公司自 2012 年以来开发的一款可支持鸿蒙原生应用和兼容 AOSP 应用的分布式操作系统。该系统利用“分布式”技术将手机、电…

第十七周周报

文章目录 摘要目标检测锚框交并比NMS 非极大值抑制输出 文献阅读&#xff1a;SMPL: A Skinned Multi-Person Linear ModelIntroductionRelated WorkModel FormulationTraining评估动态SMPL讨论结论 总结 摘要 本周看了三维人体重建的领域&#xff0c;看了一篇SMPL的文章&#…

【sqlite3】sqlite3在linux下使用sqlitebrowser工具实现数据可视化

sqlite3在linux下使用sqlitebrowser工具实现数据可视化 1. ### install sqlitebrowser 1. ### install sqlitebrowser 安装指令 sudo apt-get install sqlitebrowser通过工具打开数据库 sqlitebrowser stereo.db打开效果

【蓝桥杯日记】第一篇——如何搭建系统环境

目录 前言 环境相关文件 学生机环境-Web应用开发环境&#xff08;第十五届大赛&#xff09; 学生机环境-Java编程环境&#xff08;第十五届大赛&#xff09; 学生机环境-C/C编程环境&#xff08;第十五届大赛&#xff09; 学生机环境-Python编程环境 &#xff08;第十五届…

Spring Boot - Application Events 同步 VS 异步 发布订阅事件实战

文章目录 PreCode基础工程启动类切入口事件 发布事件同步 Listener异步Listener增加EnableAsync增加 Async 测试 Pre Spring Boot - Application Events 的发布顺序_ApplicationStartingEvent Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEv…

IntelliJ IDEA - 快速去除 mapper.xml 告警线和背景(三步走)

1、去掉 No data sources configure 警告 Settings&#xff08;Ctrl Alt S&#xff09; ⇒ Editor ⇒ Inspections ⇒ SQL ⇒ No data sources configure 2、去掉 SQL dialect is not configured 警告 Settings&#xff08;Ctrl Alt S&#xff09; ⇒ Editor ⇒ Inspecti…

GPT应用开发:运行你的第一个聊天程序

本系列文章介绍基于OpenAI GPT API开发应用的方法&#xff0c;适合从零开始&#xff0c;也适合查缺补漏。 本文首先介绍基于聊天API编程的方法。 环境搭建 很多机器学习框架和类库都是使用Python编写的&#xff0c;OpenAI提供的很多例子也是Python编写的&#xff0c;所以为了…

如何利用小程序介绍公司品牌形象?

企业小程序的建设对于现代企业来说已经成为了一项必不可少的工作。随着移动互联网的快速发展&#xff0c;越来越多的职场人士和创业老板希望通过小程序来提升企业形象&#xff0c;增强与用户的互动&#xff0c;实现更好的商业效果。在这个过程中&#xff0c;使用第三方制作平台…

数据结构排序算法总结

直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 选择排序 堆排序 归并排序 1.直接插入排序 前面的有序 后面的无序&#xff0c;无序元素插入到前面的有序列表中 int len nums.length, i 1, j 0;for(i1; i<len; i){int ele nums[i];// 插入过程for(j i…