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

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

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

  • 小米桌面时间移除了怎么恢复(小米桌面时间移除换主题)

    小米桌面时间移除了怎么恢复(小米桌面时间移除换主题)

  • 虎牙如何设置多屏同看(虎牙怎么多开直播间)

    虎牙如何设置多屏同看(虎牙怎么多开直播间)

  • 安卓连接airpods声音小(安卓连接airpods pro)

    安卓连接airpods声音小(安卓连接airpods pro)

  • ipad2018出厂有贴膜吗(苹果平板出厂有贴膜吗)

    ipad2018出厂有贴膜吗(苹果平板出厂有贴膜吗)

  • 无gui引导的后果(无gui引导什么意思)

    无gui引导的后果(无gui引导什么意思)

  • 邮箱能找回哔咔账号吗(哔咔邮箱账号找回)

    邮箱能找回哔咔账号吗(哔咔邮箱账号找回)

  • 抖音怎么换名字(抖音怎么换名字抖音)

    抖音怎么换名字(抖音怎么换名字抖音)

  • 苹果uc无法看网页视频(苹果uc无法看网页怎么办)

    苹果uc无法看网页视频(苹果uc无法看网页怎么办)

  • 全民k歌能隐身听歌吗(全民k歌能隐身访问非好友吗)

    全民k歌能隐身听歌吗(全民k歌能隐身访问非好友吗)

  • 座机转接电话怎么转(座机转接电话怎么弄)

    座机转接电话怎么转(座机转接电话怎么弄)

  • 为什么苹果11的来电铃声很小(为什么苹果11的nfc用不了)

    为什么苹果11的来电铃声很小(为什么苹果11的nfc用不了)

  • iPhone11和iPhone11pro区别(iphone11和iphone11pro手机壳通用吗)

    iPhone11和iPhone11pro区别(iphone11和iphone11pro手机壳通用吗)

  • wd移动硬盘读不出来怎么办(移动硬盘无法读出)

    wd移动硬盘读不出来怎么办(移动硬盘无法读出)

  • 键盘复制键和粘贴键哪两个(键盘复制键粘贴)

    键盘复制键和粘贴键哪两个(键盘复制键粘贴)

  • 苹果x的耳机插在哪里(苹果x的耳机插孔是圆的还是扁的)

    苹果x的耳机插在哪里(苹果x的耳机插孔是圆的还是扁的)

  • 苹果11截图怎么设置(苹果11截图怎么才能截出刘海)

    苹果11截图怎么设置(苹果11截图怎么才能截出刘海)

  • 钉钉基本信息怎么看(钉钉怎么设置基本信息)

    钉钉基本信息怎么看(钉钉怎么设置基本信息)

  • 华为手机右上角有个月亮(华为手机右上角发热是什么原因)

    华为手机右上角有个月亮(华为手机右上角发热是什么原因)

  • 微博能定时发布吗(微博能定时发布微博吗)

    微博能定时发布吗(微博能定时发布微博吗)

  • 手机来电秀怎么设置(手机来电秀怎么解除)

    手机来电秀怎么设置(手机来电秀怎么解除)

  • 电脑存储空间不足怎么办(电脑存储空间不够买什么硬盘)

    电脑存储空间不足怎么办(电脑存储空间不够买什么硬盘)

  • mozik为什么没声音(mozik怎么播放不了)

    mozik为什么没声音(mozik怎么播放不了)

  • 硬盘读写速度慢(移动硬盘读写速度慢)

    硬盘读写速度慢(移动硬盘读写速度慢)

  • 苹果充电自动断电(苹果充电自动断电功能)

    苹果充电自动断电(苹果充电自动断电功能)

  • 百度知道和百度贴吧有啥区别(百度知道和百度贴吧有什么区别)

    百度知道和百度贴吧有啥区别(百度知道和百度贴吧有什么区别)

  • 商品批发企业进项税额会计分录
  • 结算备付金会计分录
  • 普通发票为什么只能领一张
  • 用友软件80端口被占用解决方法
  • 其他综合收益算营业利润吗
  • 个人所得税申报方式选哪个比较好
  • 个体户可以开多个银行账户吗
  • 员工宿舍买热水器计入什么费用
  • 增值税专用发票和普通发票的区别
  • 企业违约补偿收条怎么写
  • 润滑油交消费税税率
  • 固定资产领用原材料要考虑增值税吗?
  • 购买税控设备怎么抵扣
  • 复式记账法和会计分录
  • 多转出的进项税能否转回
  • 所得税弥补亏损年限10
  • 个人开具工程款发票所得税怎么算
  • 定额发票验旧是什么意思
  • 什么是往来科目
  • 个人取得上市公司股权
  • 购买东西收据
  • 三个点的专票要交多少税
  • 贷款买车的利息是多少3年
  • 企业收到贷款贴息会计分录
  • 上月材料入库会计分录
  • rtfd文件
  • php变量如何定义
  • PHP:Memcached::delete()的用法_Memcached类
  • PHP:imagescale()的用法_GD库图像处理函数
  • 工资薪金所得申报流程
  • vue-router
  • 外商投资企业如何定性
  • 未交社保可以要求单位赔偿吗
  • 账龄分析法计提比例
  • php -v
  • django pycharm
  • 网络安全文章1000字
  • 原始凭证在账务处理程序中的作用
  • 可以抵扣增值税进项税额的有哪些
  • 可供出售交易性金融资产初始计量
  • 跨年费用账务处理
  • 基本社会保险制度范围
  • 公司收到生育津贴不给员工
  • 建筑劳务公司工作内容
  • 收到的稳岗补贴是否需要交税
  • 转让古董收入
  • 涉税信息声明怎么提供
  • 没收到发票也可以入账吗
  • 长期挂账其他应付款处理
  • 建筑行业的收入做什么科目
  • 流动资产周转率和总资产周转率
  • 青苗赔偿规定
  • 扣除土地价款
  • 收到票据又转背书付了账务处理
  • 怎么查企业适用的会计准则
  • 为什么预付账款可以通过应付账款核算
  • 备抵法核算坏账损失
  • win8电脑无法识别usb设备怎么办
  • 找回被删除的文件时第一步应该是什么
  • 远程桌面登录显示其他用户
  • 苹果mac电脑打不开
  • ubuntu configure
  • mac book丢失
  • elccest.exe是间谍广告程序吗 elccest进程有什么作用
  • lhotkey.exe
  • linux系统坏了怎么恢复数据
  • windows1020h2版本怎么样
  • windows xp能装微信吗
  • linux 去除换行
  • linux跨服务器调用shell脚本
  • 微信小程序简单的音乐播放器
  • insmod: init_module 'hello.ko' failed (Exec format error)
  • 批处理系统的进程调度算法
  • js鼠标滑动特效
  • jquery mobile demo
  • 用python编写的程序称为
  • 超市开发票每月额度,超了之后税率是多少
  • 车辆购置税查询怎么查
  • 进项发票勾选认证如何导出明细
  • 社会保险登记表下载
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设