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

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

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

  • 网络营销——怎样利用QQ群推广的实战技巧(网络营销怎么营销)

    网络营销——怎样利用QQ群推广的实战技巧(网络营销怎么营销)

  • 石头g10怎么设置只扫不拖(石头G10怎么设置充电时间)

    石头g10怎么设置只扫不拖(石头G10怎么设置充电时间)

  • w7系统怎么关闭休眠屏保(w7系统怎么关闭开机启动的程序)

    w7系统怎么关闭休眠屏保(w7系统怎么关闭开机启动的程序)

  • iphone怎么重新设置主号副号(iphone怎么重新设置热点)

    iphone怎么重新设置主号副号(iphone怎么重新设置热点)

  • qq文字提取功能不见了(qq文字提取功能怎么用)

    qq文字提取功能不见了(qq文字提取功能怎么用)

  • 华为手机悬浮窗口怎么设置(华为手机悬浮窗关闭)

    华为手机悬浮窗口怎么设置(华为手机悬浮窗关闭)

  • oppoa5手机录屏怎么设置声音(oppoA5手机录屏怎么把声音录进去)

    oppoa5手机录屏怎么设置声音(oppoA5手机录屏怎么把声音录进去)

  • ctrl加哪个是截屏(ctrl加什么可以截图)

    ctrl加哪个是截屏(ctrl加什么可以截图)

  • 苹果xr微信接收消息慢(苹果xr微信接收消息延迟怎么回事)

    苹果xr微信接收消息慢(苹果xr微信接收消息延迟怎么回事)

  • 群聊怎么艾特所有人(群聊怎么艾特所有人员)

    群聊怎么艾特所有人(群聊怎么艾特所有人员)

  • 微信怎么删除好友(微信怎么删除好友快捷方式)

    微信怎么删除好友(微信怎么删除好友快捷方式)

  • 如何将剪贴画设置为四周型环绕(剪贴画的图片样式怎么设置)

    如何将剪贴画设置为四周型环绕(剪贴画的图片样式怎么设置)

  • 本机识别码是什么(本机识别码是什么权限)

    本机识别码是什么(本机识别码是什么权限)

  • 关闭微信别人能看到吗(关闭微信别人能看到微信运动吗)

    关闭微信别人能看到吗(关闭微信别人能看到微信运动吗)

  • ie浏览器网页左下角感叹号(ie浏览器网页左右滚动条怎么隐藏)

    ie浏览器网页左下角感叹号(ie浏览器网页左右滚动条怎么隐藏)

  • 华为nova2是什么时候上市的(华为nova2是什么马达)

    华为nova2是什么时候上市的(华为nova2是什么马达)

  • 华为p30pro和p30pro的区别(华为p30pro和p30pro+手机壳通用吗)

    华为p30pro和p30pro的区别(华为p30pro和p30pro+手机壳通用吗)

  • 苹果手机的表情在安卓的手机里能看到吗(苹果手机的表情包在哪里)

    苹果手机的表情在安卓的手机里能看到吗(苹果手机的表情包在哪里)

  • 小米8夜光屏干嘛用的(小米夜光屏拉满还是最低)

    小米8夜光屏干嘛用的(小米夜光屏拉满还是最低)

  • 小米手环4充电几小时(小米手环4充电后没反应一直黑屏)

    小米手环4充电几小时(小米手环4充电后没反应一直黑屏)

  • 荣耀20怎么关闭应用页面(荣耀20怎么关闭hd高清通话)

    荣耀20怎么关闭应用页面(荣耀20怎么关闭hd高清通话)

  • xr有夜景模式吗(iphonexr有夜景模式)

    xr有夜景模式吗(iphonexr有夜景模式)

  • 微信转账的名字怎么取消(微信转账的名字是银行卡还是手机号)

    微信转账的名字怎么取消(微信转账的名字是银行卡还是手机号)

  • 税控盘锁死了怎么办(税控盘锁死是什么意思)

    税控盘锁死了怎么办(税控盘锁死是什么意思)

  • boe8耳机怎么连接(boe82.0耳机连怎么接app)

    boe8耳机怎么连接(boe82.0耳机连怎么接app)

  • oppoa9有息屏时钟吗

    oppoa9有息屏时钟吗

  • 怎么快速判断哪些进程是系统进程最简单的方法(如何快速判断)

    怎么快速判断哪些进程是系统进程最简单的方法(如何快速判断)

  • 个人所得税个人信息怎么填写
  • 新公司三个月没有录入职员
  • 购房发票契税票丢了可以补吗
  • 未取得发票的费用,在汇算清缴中按利润计算吗
  • 冲回多提的坏账准备分录为
  • 年末未分配利润怎么处理
  • 离职补偿金入账
  • 合并会计报表中的未分配利润反应的是什么
  • 一般纳税人建筑公司都交什么税
  • 汇款后又退回来是什么原因
  • 劳务公司外地劳务是否需要预缴税款及会计处理
  • pos机刷卡的银行有哪些
  • 长期借款转入实收资本
  • 航天金税交499
  • 贴现费用计算公式
  • 银行贷款损失的认定标准
  • 以旧换新的会计处理规定
  • 应交所得税的计算例题
  • 个税公司承担怎么做账计入其他应收款怎么平账
  • 减免能减多久
  • 开具红字专票的步骤
  • 赠送样品需要交税吗
  • 应付未付的款项怎么写凭证
  • 大额医疗救助金怎么申请
  • 非盈利组织捐赠现金支需要什么资料
  • 腾讯手游助手如何退出登录
  • ipv6无网络访问权限怎么解决
  • antd怎么用
  • 你知道约定的公司有哪些
  • PHP:Memcached::flush()的用法_Memcached类
  • PHP:pg_result_status()的用法_PostgreSQL函数
  • msmpeng.exe是什么进程
  • echarts柱形图
  • 合并报表六大抵消分录
  • 大脊山,英格兰峰区国家公园 (© John Finney Photography/Moment/Getty Images)
  • html简单例子
  • php安装及使用教程
  • 注册资金不能到位怎么办
  • 长期投资对投资方财务状况的实质性影响有哪些
  • php中文字符串截取
  • mac datagrip
  • flash中文版
  • 餐饮业采购管理
  • 增值税专用发票上注明的价款含税吗
  • sql server job
  • 机械租赁开票内容
  • 应付职工薪酬的账务处理
  • 出售可供出售金融资产
  • 房地产开发企业资质证书
  • 捐赠的资产属于什么科目
  • 母猪生小猪会计分录
  • 水利建设税怎么做账
  • 盈余公积现金流量表中应填入哪里呢
  • 对方开普票,怎么扣税
  • 新准则固定资产处置的账务处理
  • 成本会计主要做什么工作
  • 采用账龄分析法计提坏账准备
  • 出租人融资租赁的判断标准
  • mysql中的limit用法有哪些(推荐)
  • sql必学必会
  • windows10显示
  • linux chfn命令
  • win7旗舰版怎么进入bios
  • windowsxp弹出广告怎么解决
  • windows xp windows
  • linux下scp远程拷贝包含空格的目录或者文件的解决方法
  • win8.0升级win8.1
  • jQuery实现别踩白块儿网页版小游戏
  • node 进程
  • jquery fadein不起作用
  • koa与node.js开发实战
  • jquery属性选择器,选取所有带href
  • javascript快速入门
  • “python”
  • js面向接口编程
  • android多个dex
  • 广东电子税务局手机版
  • 免征的增值税税额应计入营业外收入嘛
  • 昆明地税局长是谁
  • 小规模纳税人开专票需要交税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设