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

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

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

  • 怎样实现营销型网站推广的终极目标?(如何实现营销)

    怎样实现营销型网站推广的终极目标?(如何实现营销)

  • 斗鱼超管来了有什么提示(斗鱼超管好进么)

    斗鱼超管来了有什么提示(斗鱼超管好进么)

  • 拼多多如何关闭月卡自动续费(拼多多如何关闭隐私号码保护)

    拼多多如何关闭月卡自动续费(拼多多如何关闭隐私号码保护)

  • 哈罗单车怎么删除我的行程(哈罗单车怎么删除以往订单记录)

    哈罗单车怎么删除我的行程(哈罗单车怎么删除以往订单记录)

  • 访问环境异常43003是什么意思(访问环境异常43003 12306)

    访问环境异常43003是什么意思(访问环境异常43003 12306)

  • 闲鱼花呗收款怎么开通(闲鱼花呗收款怎么提现)

    闲鱼花呗收款怎么开通(闲鱼花呗收款怎么提现)

  • 计算机主频的周期是指什么(计算机主频的周期是多少)

    计算机主频的周期是指什么(计算机主频的周期是多少)

  • 发快手下边字不显示怎么回事(发快手下面的字怎么写上去的)

    发快手下边字不显示怎么回事(发快手下面的字怎么写上去的)

  • ipv6在设计上具有什么特点(简述ipv6的设计目标)

    ipv6在设计上具有什么特点(简述ipv6的设计目标)

  • 魅族17有没有无线充电(魅族17带nfc吗)

    魅族17有没有无线充电(魅族17带nfc吗)

  • 华为手机投屏连接以后没有画面(华为手机投屏连接线异常)

    华为手机投屏连接以后没有画面(华为手机投屏连接线异常)

  • 举报微信群群主会知道谁举报的吗(举报微信群群主赌博)

    举报微信群群主会知道谁举报的吗(举报微信群群主赌博)

  • 为什么快手看不到红包(为什么快手看不到好友在线)

    为什么快手看不到红包(为什么快手看不到好友在线)

  • 微信退出登录别人打电话会显示什么(微信退出登录别人发消息在登陆后能看到吗)

    微信退出登录别人打电话会显示什么(微信退出登录别人发消息在登陆后能看到吗)

  • 微信逻辑错误登录不了怎么处理(微信号登录显示逻辑错误)

    微信逻辑错误登录不了怎么处理(微信号登录显示逻辑错误)

  • ipad要充多久才能充满(ipad一般要充多久)

    ipad要充多久才能充满(ipad一般要充多久)

  • airpods2的灯在哪里(airpods2的灯在哪个位置)

    airpods2的灯在哪里(airpods2的灯在哪个位置)

  • iphone8支持多少w快充(iphone8支持多少帧数)

    iphone8支持多少w快充(iphone8支持多少帧数)

  • iphone11听筒防水吗(iphone11防水吗进水后听筒有杂音滋滋)

    iphone11听筒防水吗(iphone11防水吗进水后听筒有杂音滋滋)

  • 如何申请2个拼多多号(怎么申请两个拼多多账号)

    如何申请2个拼多多号(怎么申请两个拼多多账号)

  • win10怎么关掉杀毒软件(如何关闭windows 10杀毒)

    win10怎么关掉杀毒软件(如何关闭windows 10杀毒)

  • 手机怎么散热(手机怎么散热快一点)

    手机怎么散热(手机怎么散热快一点)

  • 就寝闹钟为什么不能删除(就寝闹钟为什么删不了)

    就寝闹钟为什么不能删除(就寝闹钟为什么删不了)

  • 怎么生成目录页(怎么生成目录页面)

    怎么生成目录页(怎么生成目录页面)

  • 京东商城怎样延长收货(京东怎么延长退货时间)

    京东商城怎样延长收货(京东怎么延长退货时间)

  • 火山电台直播怎么放歌(火山电台直播怎么静音)

    火山电台直播怎么放歌(火山电台直播怎么静音)

  • 收货地址怎么改(快手收货地址怎么改)

    收货地址怎么改(快手收货地址怎么改)

  • 企业所得税相关分录
  • 零售环节征收消费税标准
  • 房产税从价计征如何算
  • 土地增值税清算方法与技巧
  • 控股子公司注销了可以起诉总公司吗怎么办
  • 土地增值税筹划实战
  • 材料委托加工
  • 股权转让如何避免印花税
  • 长期借款借方登记归还的本金和利息
  • 作为展示用的物品
  • 福利费用计入
  • 小规模纳税人印花税怎样计算
  • 购买的固定资产可以一次计入管理费用吗
  • 旅行社开具的发票是不都得写旅游服务
  • 960011115金税盘错误
  • 计算企业所得税的公式
  • 物流行业主营业务成本会计分录
  • 失业保险费退还计入什么科目
  • 机械设备已使用怎么处理
  • 发票丢失登报声明怎么写
  • 收到投资款怎么做记账凭证
  • 取得劳务收入的会计分录
  • 长期待摊费用发生当月摊还是次月摊
  • 税务稽查补缴增值税税款的账务处理
  • 什么情况下确认成本
  • 六月雪的养殖方法和注意事项
  • 应收账款转让的风险
  • 商贸企业小规模转一般纳税人条件
  • windows优化设置
  • 转让无形资产使用权和所有权的区别
  • php中strtotime
  • 出口退税的申报期限是多久
  • 扣缴义务人需要办理税务登记吗
  • 临时用工账务处理流程
  • 任意盈余公积金的用途
  • 阿普拉萨
  • php单例模式连接数据库
  • php动态生成网页
  • php语言之面向对象编程 educoder
  • 猿类作文
  • php die exit
  • php实现页面静态化
  • 实际成本法核算方法
  • 电话订票起售时间
  • 企业处置固定资产发生的净损失应计入
  • 旅行社的会计分录怎么做
  • 固定资产折旧怎么做会计科目
  • phpcms怎么修改模板风格
  • 员工加班打车费报销
  • 国际货运代理可以分哪几类?
  • 银行进账单是外来原始凭证吗
  • 应收票据的核算内容
  • 装修款需要开发票吗
  • 家电销售的税率
  • 营改增清包工
  • 银行承兑到期后未兑付
  • 有限合伙企业需要缴纳企业所得税吗
  • 公司地址的变更需要哪些资料和手续
  • 外币账户记账方法
  • 增值税期末留抵税额是什么意思
  • 公司买车可以少多少钱
  • 税务自查补缴税款怎么办
  • 研发支出费用化和资本化的界定
  • 道路施工企业的上级监管部门是谁
  • 软件开发费属于研发和技术服务还是信息技术服务
  • 专项附加扣除项目
  • 消费满赠送活动规则
  • 零余额账户年终余额清零的规定
  • ubuntu20安装fcitx5
  • 电脑图片密码是什么意思
  • webpack使用ejs
  • 如何正确使用农药芸苔素
  • 一个简单的飞机
  • easyui multiple
  • 字符有大小吗
  • Node.js node-schedule定时任务隔多少分钟执行一次的方法
  • linux查看shell脚本内容
  • jquery1.12.4
  • [置顶]马粥街残酷史
  • 河南电子税务局官网app
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设