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

4.5.3 ArrayList


文章目录

  • 1.特点
  • 2. 练习:ArrayList测试
  • 3.ArrayList扩容


1.特点

  1. 存在java.util包中
  2. 内部是用数组结构存放数据,封装数组的操作,每个对象都有下标
  3. 内部数组默认的初始容量是10,如果不够会以1.5倍的容量增长
  4. 查询快,增删数据效率会低

在这里插入图片描述
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/82682a12efea4717b7787c7086df45af.png

2. 练习:ArrayList测试

package partThree;import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;/**本类用于ArrayList相关测试*/
public class TestArrayList {public static void main(String[] args) {//1.创建对应的集合对象/**底层会自动帮我们创建数组来存放对象,并且数组的初始容量是10*/ArrayList<Integer> list = new ArrayList();//2.向集合中添加元素,用于测试list.add(100);list.add(200);list.add(300);list.add(400);list.add(400);list.add(300);System.out.println(list); //打印查看集合中的元素//3.测试常用方法//list.clear();  //清空集合System.out.println(list.contains("100"));//false  因为这个100是字符串System.out.println(list.get(0));//100,根据下标获取元素System.out.println(list.indexOf(400));//3,判断指定元素第一次出现的位置System.out.println(list.lastIndexOf(400));//4,判断指定元素最后一次出现的位置System.out.println(list.remove(0)); //删除集合中0号索引处的元素//System.out.println(list.remove(300));/**上面的代码会报错:数组下标越界:index:300 size:5* 数组中传入的是integer,是引用类型,不是基本类型,输入300默认为元素位置* 主要是因为List中有两个重载的remove(),如果传入的是300* 会认为是int类型的index索引,所以如果想指定元素删除数据* 需要把int类型的300手动装箱成Integer类型*/System.out.println(list.remove(Integer.valueOf(300)));System.out.println(list);System.out.println(list.size());//获取集合中元素的个数System.out.println(list.set(0,77));//修改指定位置的值//4. 迭代集合//4.1 使用for循环System.out.println("------------方式1-------------");for (int i=0; i<list.size(); i++){//循环集合System.out.println(list.get(i));//根据本轮循环到的索引获取集合中对应的元素}//4.2 使用高效循环System.out.println("------------方式2-------------");for(Integer num :list){//for(元素类型 元素名  : 要遍历的集合名){循环体}System.out.println(num); //打印每轮遍历到的元素}//4.3 使用 IteratorSystem.out.println("------------方式3-------------");Iterator<Integer> it = list.iterator();//获取迭代器对象//循环迭代集合中的所有元素while(it.hasNext()){//判断是否有下一个元素可迭代,如果有,继续循环System.out.println(it.next());//打印本轮迭代到的元素}//4.4 使用 ListIteratorSystem.out.println("------------方式4-------------");ListIterator<Integer> it2 = list.listIterator(); //获取迭代器对象//循环迭代集合中的所有元素while(it2.hasNext()){//判断是否有下一个元素可迭代,如果有,继续循环System.out.println(it2.next());//打印本轮迭代到的元素}}
}

== 我们集合中存入的类型是引用类型,不是基本类型
如果想根据元素删除数据,需要把int类型参数转为集合中的元素类型integer==

3.ArrayList扩容

ArrayList相当于在没指定initialCapacity时就是会使用延迟分配对象数组空间,当第一次插入元素时才分配10(默认)个对象空间。假如有20个数据需要添加,那么会分别在第一次的时候,将ArrayList的容量变为10;之后扩容会按照1.5倍增长。也就是当添加第11个数据的时候,Arraylist继续扩容变为10*1.5=15;当添加第16个数据时,继续扩容变为15 * 1.5 =22个
ArrayList没有对外暴露其容量个数,查看源码我们可以知道,实际其值存放在elementData对象数组中,那我们只需拿到这个数组的长度,观察其值变化了几次就知道其扩容了多少次。怎么获取呢?只能用反射技术了。
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/2445.html

相关文章:

  • 十二、Linux文件 - fseek函数讲解
  • Python3.10新特性之match语句示例详解
  • 虎牙盈利能力得到改善,但监管风险对其收入产生负面影响
  • HBase 分布式搭建
  • 【Python】修改枚举的取值及链式调用
  • 复现篇--zi2zi
  • 153、【动态规划】leetcode ——416. 分割等和子集:滚动数组(C++版本)
  • linux head命令(head指令)(获取文件或管道输出结果前n行,默认前10行)与sed命令区别
  • Mysql数据库09——分组聚合函数
  • 第43章 菜单实体及其约束规则的定义实现
  • OpenAI最重要的模型【CLIP】
  • 分享112个JS菜单导航,总有一款适合您
  • MySQL 3:MySQL数据库基本操作 DQL
  • sql语句的优化
  • Shell脚本之——自动安装JDK
  • 大数据---Hadoop安装Hadoop简易版
  • Spring框架中使用到的设计模式以及对应的类(方法)
  • 类和类的定义
  • 丝绸之路——NFT 系列来袭!
  • 配置CMAKE编译环境:VSCODE + MinGW
  • 六、mybatis与spring的整合
  • JavaWeb--JDBC
  • 大数据框架之Hadoop:入门(四)Hadoop运行模式
  • 《爆肝整理》保姆级系列教程python接口自动化(十一)--发送post【data】(详解
  • 【微服务】Nacos注册中心
  • 跟开发打了半个月后,我终于get报bug的正确姿势了
  • js万能类型检测Object.prototype.toString.call——定制Object.prototype.toString.call的检测结果
  • 激光slam学习笔记2--激光点云数据结构特点可视化查看
  • SpringBoot笔记【JavaEE】
  • 目标检测算法之voxelNet与pointpillars对比