位置: 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 转载请保留说明!

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

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

  • 华为nova5为什么收到短信无提示(华为nova5为什么没有语音唤醒功能)

    华为nova5为什么收到短信无提示(华为nova5为什么没有语音唤醒功能)

  • 华为p30录屏不见了(华为p30录制屏幕忽然没有是怎么回事)

    华为p30录屏不见了(华为p30录制屏幕忽然没有是怎么回事)

  • 微信朋友圈图片折叠怎么办(微信朋友圈图片点不开啥原因)

    微信朋友圈图片折叠怎么办(微信朋友圈图片点不开啥原因)

  • 知乎审核一个回答需要多久(知乎审核好久)

    知乎审核一个回答需要多久(知乎审核好久)

  • 小米9后盖碎了(小米9后盖碎了有必要去修吗)

    小米9后盖碎了(小米9后盖碎了有必要去修吗)

  • 手机壳黄了怎么能变白(手机壳黄了怎么清洗变干净透明的)

    手机壳黄了怎么能变白(手机壳黄了怎么清洗变干净透明的)

  • 怎样恢复小米8快充功能(怎样恢复小米8手机出厂设置?)

    怎样恢复小米8快充功能(怎样恢复小米8手机出厂设置?)

  • 打印机连接电脑必须安装驱动吗(打印机连接电脑哪个usb接口)

    打印机连接电脑必须安装驱动吗(打印机连接电脑哪个usb接口)

  • sata是什么硬盘(sata硬盘百科)

    sata是什么硬盘(sata硬盘百科)

  • 中望cad和autocad区别(中望cad和autocad一样吗)

    中望cad和autocad区别(中望cad和autocad一样吗)

  • 进程和程序的本质区别(进程和程序的本质区别是)

    进程和程序的本质区别(进程和程序的本质区别是)

  • 美版有锁和无锁的区别(美版有锁和无锁差多少钱)

    美版有锁和无锁的区别(美版有锁和无锁差多少钱)

  • 景深镜头分为哪两种(景深镜头是干什么用的)

    景深镜头分为哪两种(景深镜头是干什么用的)

  • 环幕屏跟曲面屏的区别(环幕屏和曲面屏)

    环幕屏跟曲面屏的区别(环幕屏和曲面屏)

  • 如何压缩ppt文件大小(ppt压缩)

    如何压缩ppt文件大小(ppt压缩)

  • 微信开机自动启动怎么取消(微信开机自动启动怎么开)

    微信开机自动启动怎么取消(微信开机自动启动怎么开)

  • 拼多多怎么获得免拼卡(拼多多怎么获得取件码)

    拼多多怎么获得免拼卡(拼多多怎么获得取件码)

  • 苹果怎么删除云盘照片(苹果怎么删除云备份)

    苹果怎么删除云盘照片(苹果怎么删除云备份)

  • airpods2多久充满电(airpods2多久能充满)

    airpods2多久充满电(airpods2多久能充满)

  • 小米9带无线充电器吗(小米带无线充电功能)

    小米9带无线充电器吗(小米带无线充电功能)

  • wifi密码怎么改?怎么修改wifi密码(wifi密码怎么改手机里面)

    wifi密码怎么改?怎么修改wifi密码(wifi密码怎么改手机里面)

  • 魅族路由器怎么上网的?魅族路由器的四种上网方式(魅族路由器怎么样)

    魅族路由器怎么上网的?魅族路由器的四种上网方式(魅族路由器怎么样)

  • 维多利亚瀑布上的彩虹,赞比亚 (© Dietmar Temps/Shutterstock)(维多利亚瀑布有多高?多宽?)

    维多利亚瀑布上的彩虹,赞比亚 (© Dietmar Temps/Shutterstock)(维多利亚瀑布有多高?多宽?)

  • 【深度学习】详解 MoCo

    【深度学习】详解 MoCo

  • phpcms 1064错误的解决办法

    phpcms 1064错误的解决办法

  • 发票超过认证期有什么影响
  • 什么是价内税不是重复了吗
  • 多交企业所得税可以放弃退税吗
  • 个人所得税手续费奖励是否交个税
  • 去年滞纳金没入营业外今天怎么账务处理
  • 每月长摊金额如何分摊
  • 暂估入库必须次日入库吗
  • 销售货物未开发怎么处理
  • 平均分摊法计算公式
  • 存货清查的结果
  • 应收债权属于非抵押吗
  • 收入工程款后什么时候计提印花税
  • 协会会费支出计什么科目
  • 未到期责任准备金计算方法
  • 退休人员返聘工资交个人所得税标准
  • 公司租个人车辆如何办理
  • 国税注销了地税没注销现在经营异常
  • 涉农产品税率
  • 个人抬头的医药费可以进费用吗
  • 发票上电话可以写手机号吗
  • 搞金融的企业
  • 劳务报酬交的税汇算清缴能退
  • 工程储备的材料是存货吗
  • 增值税即征即退会计处理
  • 增值税以前年度损益调整
  • 转出未交增值税借方余额表示什么
  • 个人收回转让的股权个税应如何处理?
  • 增值税留抵退税政策解读
  • 穿越火线封号查询官网
  • 附加税要先计提再支付吗
  • 建筑业成本核算表格百度网盘
  • 费用发票开的是跨年的账务处理
  • 公司收入算认缴出资吗
  • 转让股权企业所得税怎么计算
  • 购入股票佣金会减少吗
  • 装修费怎么记会计科目
  • 借款凭证会计分录是什么
  • 博德明高沼上布朗威利山麓的废弃小屋,英格兰 (© Helen Hotson/Alamy Stock Photo)
  • err03 failed to
  • 前端调用后端代码
  • 新成立公司建账
  • 基于深度学习的车型识别系统(Python+清新界面+数据集)
  • gnss定位技术的应用前景
  • vue组件入门
  • php中url什么意思
  • 购物赠品的相关法律
  • 印花税申报未扣款在哪里查询
  • 项目支出可以列办公费吗
  • 事业单位银行开户规定
  • 一般纳税人收到的普票可以抵扣吗
  • 应收账款的贷方发生额表示什么
  • 应交税费属于什么负债
  • 补交增值税如何转管理费用
  • 仓库货架应该计入什么科目
  • MySQL 5.6 中 TIMESTAMP 的变化分析
  • 电脑ahci模式什么意思
  • vista下实现秘密下载的解决办法
  • 怎样升级智慧中小学版本软件
  • virtualbox虚拟机旋转屏幕
  • win10一年更新几次
  • win8账户锁定无法登录
  • linux删除lun
  • 升级win10系统后无法联网的三种解决方法
  • linux如何启动tomcat
  • unity3d官方教程
  • android加载dex
  • Chrome调试技巧
  • 安卓手机查看sd卡
  • javascript截图找图
  • 广东省电子税务局登录方式
  • 河南省个人无犯罪证明书
  • 督察综合服务中心是干什么的
  • 深入开展税务文化
  • 一般纳税人销售收入分录
  • 开票日期是今年但是业务是去年
  • 个体工商户 浙江
  • 湖州市2020年最低生活保障
  • 2013年山西高考作文
  • 专票清单用什么纸打印
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设