位置: IT常识 - 正文

深度解析ArrayList使用(深度解析冯德伦最后为什么选了舒淇)

编辑:rootadmin
深度解析ArrayList使用

推荐整理分享深度解析ArrayList使用(深度解析冯德伦最后为什么选了舒淇),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深度解析张艺谋《坚如磐石》,深度解析你也是个rapper,深度解析天蝎女爱情观,深度解析你也是个rapper,深度解析天蝎女,深度解析何以笙箫默,深度解析何以笙箫默,深度解析天蝎女爱情观,内容如对您有帮助,希望把文章链接给更多的朋友!

文章目录一、ArrayList是什么?二、ArrayList的构造方法三、ArrayList的常见方法常见方法遍历ArrayList使用迭代器删除元素四、ArrayList的扩容机制一、ArrayList是什么?

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。

我们发现ArrayList类位于java.util包中,使用之前需要去引入它.

import java.util.ArrayList;

ArrayList如何定义:

ArrayList<E> arrayList = new ArrayList<E>();

此数E为泛型实参类型,只能为引用数据类型,ArrayList想存储什么类型的数据,我们就传什么就可以。

List<E> list = new ArrayList<E>();

因我们的ArrayList是继承于List的,所以我们可以用父类去接受子类对象,向上转型。

二、ArrayList的构造方法

我们发现ArrayList一共提供了三种构造方法。 构造方法1: 构造一个空的顺序表

List<Integer> list = new ArrayList<>();

构造方法2: 构造一个指定大小为5的顺序表

List<Integer> list = new ArrayList<>(5);

构造方法3: 此处传入的要么是自己本身类型,或者是子类类型。 此处构造一个和list2元素一致的顺序表

List<Integer> list2 = new ArrayList<>(5); List<Integer> list = new ArrayList<>(list2);深度解析ArrayList使用(深度解析冯德伦最后为什么选了舒淇)

初始时的坑

List list = new ArrayList();

这样对顺序表进行初始化的话,没有指定任何类型,这样的话可以存放任意类型的元素,这样会存在很大的安全隐患。

三、ArrayList的常见方法常见方法

在我的上一篇实现顺序表中,已经把大多数方法手动实现了一遍,此处我在说明几个重点的。 remove方法 ArrayList提供给我们两个remove方法 一个是传入要删除的下标,一个是要删除的引用。

public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(10); list.add(8); list.remove(1); System.out.println(list); }

如果我们传入的是int类型那么我们删除的是该下标的数据。

public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(10); list.add(8); list.remove(new Integer(10)); System.out.println(list); }

如果我们传入的是引用数据类型,那么将删除该顺序表中的该引用数据。 subList方法

public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); System.out.println("截取之前的list:"+list); List<Integer> list1 = list.subList(1,3); list1.set(0,5); System.out.println("截取之后的list:"+list); }

为啥改了list1之后,list的数据也发生了变化。 因为在截取之后并没有复制一份内容给list1,而是指向同一块内容。

遍历ArrayList

方法1:

public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+" "); } System.out.println(); }

方法2:

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

方法3: 使用迭代器

方法作用.next()返回迭代器写一个元素,更新迭代器状态.hasNext()检测集合中是否还有元素.remove()将迭代器返回的元素删除public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); Iterator<Integer> it = list.listIterator(); while (it.hasNext()) { System.out.print(it.next()+" "); } System.out.println(); }使用迭代器删除元素

我们删除集合小于3的元素

public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); Iterator<Integer> it = list.listIterator(); while (it.hasNext()) { if(it.next() < 3) { it.remove(); } } System.out.println(list); }

迭代器的remove方法只能删除当前指向的元素。

四、ArrayList的扩容机制List<Integer> list = new ArrayList<>();

很多资料都在说这样初始化一个集合,说默认大小为10,那事实到底是不是如此呢?我们一步步查看源码一探究竟。

我们发现当前引用指向后面那个引用 我们发现这里的引用是一个空引用,初始集合时,是一个空集合。 那如何扩容呢? 既然我们的顺序表是空的,那如何add呢? 如果是无参构造的话,就传一个默认大小和传入大小的最大值。 我们可以发现如果大于数组大小时,就会grow。 我们可以发现计算一个新容量,和我们传入的大小做比较,如果新容量小于传入的大小时,指定当前集合大小为传入的大小。否则,对集合大小进行1.5倍扩容。 但如果我们1.5倍扩容的大小超过了这个指定的范围2147483639时 系统会报一个内存溢出异常。

1. 检测是否真正需要扩容,如果是调用grow准备扩容 2. 预估需要库容的大小 初步预估按照1.5倍大小扩容 如果用户所需大小超过预估1.5倍大小,则按照用户所需大小扩容 真正扩容之前检测是否能扩容成功,防止太大导致扩容失败 3. 使用copyOf进行扩容

本文链接地址:https://www.jiuchutong.com/zhishi/300594.html 转载请保留说明!

上一篇:李宏毅深度学习笔记——呕心整理版(李宏毅课程)

下一篇:前端常见八大设计模式(前端都有哪些)

  • oppo手机怎么绑定门禁卡(oppo手机怎么绑定邮箱地址)

    oppo手机怎么绑定门禁卡(oppo手机怎么绑定邮箱地址)

  • 苹果12港版支持电信吗(苹果12港版支持双卡吗)

    苹果12港版支持电信吗(苹果12港版支持双卡吗)

  • 小米画报不更换壁纸(小米画报为什么就那么几张轮换)

    小米画报不更换壁纸(小米画报为什么就那么几张轮换)

  • 苹果网易云歌词怎么显示在手机屏幕上(苹果网易云歌词字体大小怎么改)

    苹果网易云歌词怎么显示在手机屏幕上(苹果网易云歌词字体大小怎么改)

  • 微信限制加人怎么解封(微信限制加人怎么要好友辅助)

    微信限制加人怎么解封(微信限制加人怎么要好友辅助)

  • cad构造线快捷键命令(cad中的构造线快捷键)

    cad构造线快捷键命令(cad中的构造线快捷键)

  • 华为p40pro微信视频怎么开美颜(华为p40Pro微信视频美颜怎么关)

    华为p40pro微信视频怎么开美颜(华为p40Pro微信视频美颜怎么关)

  • 1458是ipad几(ipad型号a1458是ipad几)

    1458是ipad几(ipad型号a1458是ipad几)

  • 路由器用户名和密码在哪里查看(路由器用户名和密码忘了怎么查)

    路由器用户名和密码在哪里查看(路由器用户名和密码忘了怎么查)

  • 退出微信后记录都没了(退出微信后记录会消失吗)

    退出微信后记录都没了(退出微信后记录会消失吗)

  • qq的扩列为什么匹配失败(qq的扩列为什么下线)

    qq的扩列为什么匹配失败(qq的扩列为什么下线)

  • 联想小新黑屏怎么唤醒(联想小新黑屏怎么重启)

    联想小新黑屏怎么唤醒(联想小新黑屏怎么重启)

  • 蓝牙耳机共享联系人是什么意思(蓝牙耳机共享联系人有风险)

    蓝牙耳机共享联系人是什么意思(蓝牙耳机共享联系人有风险)

  • 抖音私聊已读显示(抖音私聊对方已读)

    抖音私聊已读显示(抖音私聊对方已读)

  • oppor11plus屏幕多大(oppor11plus屏幕多少钱)

    oppor11plus屏幕多大(oppor11plus屏幕多少钱)

  • 如何查找自己的电话(如何查找自己的邮箱号)

    如何查找自己的电话(如何查找自己的邮箱号)

  • 苹果x输入密码后就卡住了(苹果X输入密码界面数字失灵)

    苹果x输入密码后就卡住了(苹果X输入密码界面数字失灵)

  • iphonexr设备管理信任在哪(设备管理在哪里找苹果xr)

    iphonexr设备管理信任在哪(设备管理在哪里找苹果xr)

  • 在word单击工具栏上的复制(在word中,单击下面四个常用工具栏中的按钮)

    在word单击工具栏上的复制(在word中,单击下面四个常用工具栏中的按钮)

  • vivo手机录屏怎么开启(vivo手机录屏怎么没有声音)

    vivo手机录屏怎么开启(vivo手机录屏怎么没有声音)

  • 苹果库乐队怎么下载(苹果库乐队怎么设置铃声)

    苹果库乐队怎么下载(苹果库乐队怎么设置铃声)

  • vivo v1838a什么意思(vivo手机v1838a是什么型号)

    vivo v1838a什么意思(vivo手机v1838a是什么型号)

  • 酷狗音怎么在陌陌播放(酷狗怎么和陌生人一起听歌)

    酷狗音怎么在陌陌播放(酷狗怎么和陌生人一起听歌)

  • 怎样恢复qq失效的照片(怎样恢复QQ失效文件手机)

    怎样恢复qq失效的照片(怎样恢复QQ失效文件手机)

  • 在此设备上设置生物特征识别验证时出问题(在此设备上设置生物识别验证时出现问题)

    在此设备上设置生物特征识别验证时出问题(在此设备上设置生物识别验证时出现问题)

  • iphone7电池容量(iphone7电池容量78%)

    iphone7电池容量(iphone7电池容量78%)

  • linux 查看文件内容具体的某一行数据(linux 查看文件内容 转换字符编码)

    linux 查看文件内容具体的某一行数据(linux 查看文件内容 转换字符编码)

  • 栀子花的养殖方法和注意事项(栀子花的养殖方法和注意事项茉莉花)

    栀子花的养殖方法和注意事项(栀子花的养殖方法和注意事项茉莉花)

  • 【小程序开发】事件监听 | 类型划分 | 属性分析(小程序开发公司十大排名)

    【小程序开发】事件监听 | 类型划分 | 属性分析(小程序开发公司十大排名)

  • Vue路由守卫(通俗易懂)(vue路由守卫用法)

    Vue路由守卫(通俗易懂)(vue路由守卫用法)

  • 税务稽查以前年度进项税额转出
  • 费用计入管理费用与销售费用的区别
  • 季度对账单 怎么处理
  • 电子税务局怎么登录
  • 大病医疗可以抵扣吗
  • 资产负债表中的货币资金怎么算
  • 补提上年度所得税影响本年所得税吗
  • 职工薪酬纳税调整标准
  • 营改增后小规模纳税人
  • 还在讨论“税务金四”上线?税务和银行要联手清查单位和个人账户了!
  • 红包营销活动方案
  • 电子税务局里的利润表,本月金额是填累计数吗
  • 社保不报的情况下保险报销吗
  • 没进项发票要交多少税
  • 无偿赠送资产需要交哪些税
  • 预收购货款的会计分录
  • 汇算清缴工资调增,账务要处理吗
  • 增值税及附加税费减免一览表
  • 公司控股的公司下子公司有哪些
  • 房地产企业收到的首付款要交税吗
  • 鸿蒙系统怎么升级3.0
  • 工厂没有生产许可证可以生产吗
  • 收到客户付款 会计分录
  • 银行退回手续费的账务处理
  • php入门基础教程
  • php-msf
  • 小规模纳税人税控设备可以抵扣吗设备
  • PHP:pg_result_status()的用法_PostgreSQL函数
  • 资产接收范围的确定
  • 如何增加税务稽查信息
  • 购进油漆,用于装饰本企业办公楼
  • 费用的结转是在借方还是贷方
  • 什么叫股权溢价之谜?
  • 收到某单位投入一批原材料
  • 以前年度损益调整结转到本年利润吗
  • 个人独资为什么不能叫公司
  • 待处理财产损益期末结转到哪里
  • 交易性金融资产处置时的会计核算步骤
  • 卖固定资产计入
  • 收到进项税发票
  • 机关党建经费提取比例
  • 法人股东 分红
  • 事业单位体检费标准是多少
  • 小规模季度开票不超过多少
  • 水电费没有发票吗
  • 支付给法律顾问怎么做账
  • 小规模开票的税点是多少
  • 高新企业预缴增值税税率
  • 提前报废固定资产会导致账面价值减少吗
  • 企业票据贴现属于什么业务
  • 经营一家淘宝店需要多少钱
  • 生产配合销售还是销售配合生产
  • mac上的home键在哪
  • ubuntu桌面右键
  • macbookpro如何扫描
  • 联想lenovoideapad700-15isk
  • 在microsoft store
  • linux设置用户名和密码
  • centos编译器
  • mac safemode
  • winxp/win7/win2003 电脑开机密码设置图文方法
  • win7桌面小工具如何设置使用
  • 用VMware安装阿里linux
  • win8怎么删除所有东西
  • node.js console.log
  • android开发环境的搭建实验总结
  • javascript总结
  • 获取nodejs命令行信息
  • js实现滑块拖动
  • 浅谈一下新冠的好处
  • python入门教程
  • js传参是什么意思
  • 快速掌握英语的方法
  • qpython pydroid
  • python结合了什么的高级语言
  • 周炜老婆是干什么的
  • 领导班子和领导干部政绩观偏差主要问题清单
  • 增值税纳税申报表怎么填
  • 河南车船税收费标准图片
  • 加工中心钻孔进给
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设