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

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

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

  • 这两年的营销节奏有点乱(2021年营销活动节点)

    这两年的营销节奏有点乱(2021年营销活动节点)

  • 中国移动手机炫铃(移动炫铃)(移动 厅)

    中国移动手机炫铃(移动炫铃)(移动 厅)

  • 华硕win10键盘失灵(华硕win10键盘无效)

    华硕win10键盘失灵(华硕win10键盘无效)

  • k20pro指纹解锁会闪一下屏(k20pro指纹解锁哪里有圈圈)

    k20pro指纹解锁会闪一下屏(k20pro指纹解锁哪里有圈圈)

  • 手机卡怎么插在手机上(手机卡如何插)

    手机卡怎么插在手机上(手机卡如何插)

  • airpods有时候不弹窗(AirPods有时候不会自动连手机)

    airpods有时候不弹窗(AirPods有时候不会自动连手机)

  • 抖音合唱怎么听不到自己的声音(抖音合唱怎么听不到伴奏)

    抖音合唱怎么听不到自己的声音(抖音合唱怎么听不到伴奏)

  • excel怎么设置数字序号(excel怎么设置数字不变)

    excel怎么设置数字序号(excel怎么设置数字不变)

  • 苹果手机锁屏时微信没有提示音(苹果手机锁屏时来微信没有声音怎么回事)

    苹果手机锁屏时微信没有提示音(苹果手机锁屏时来微信没有声音怎么回事)

  • 手机带pro和不带pro有什么区别(手机带pro和不带pro)

    手机带pro和不带pro有什么区别(手机带pro和不带pro)

  • 网上买的手机实体店保修吗(网上买的手机实体店会帮忙上传一些更换手机的资料吗)

    网上买的手机实体店保修吗(网上买的手机实体店会帮忙上传一些更换手机的资料吗)

  • 备份失败是怎么回事(备份失败怎么取消不了)

    备份失败是怎么回事(备份失败怎么取消不了)

  • 键盘caps灯亮怎么关(键盘caps灯亮怎么开)

    键盘caps灯亮怎么关(键盘caps灯亮怎么开)

  • 充电锂电池的T极有什么用(充电锂电池的型号)

    充电锂电池的T极有什么用(充电锂电池的型号)

  • 华为手机怎么下载腾讯视频(华为手机怎么下载第二个微信)

    华为手机怎么下载腾讯视频(华为手机怎么下载第二个微信)

  • ie浏览器怎么截屏(ie浏览器怎么截图)

    ie浏览器怎么截屏(ie浏览器怎么截图)

  • 手机qq群文件怎么上传(手机qq群文件怎么转移到文件夹)

    手机qq群文件怎么上传(手机qq群文件怎么转移到文件夹)

  • 抖音怎么上传高清视频(抖音怎么上传高清画质)

    抖音怎么上传高清视频(抖音怎么上传高清画质)

  • airpods怎么开关机(AirPods怎么开关降噪)

    airpods怎么开关机(AirPods怎么开关降噪)

  • 铁路e卡通怎么选座位(铁路e卡通怎么关闭)

    铁路e卡通怎么选座位(铁路e卡通怎么关闭)

  • 计算机的发展阶段通常是按计算机所采用的什么来划分的(计算机的发展阶段主要是以( )来划分的)

    计算机的发展阶段通常是按计算机所采用的什么来划分的(计算机的发展阶段主要是以( )来划分的)

  • 华为新闻资讯怎么关(华为取消新闻资讯)

    华为新闻资讯怎么关(华为取消新闻资讯)

  • cad套坐标最简单方法(cad套坐标步骤视频)

    cad套坐标最简单方法(cad套坐标步骤视频)

  • 暴风影音如何循环播放视频(暴风影音怎么设置循环播放本地视频)

    暴风影音如何循环播放视频(暴风影音怎么设置循环播放本地视频)

  • win10改win7鼠标无反应(win10改win7鼠标无反应bios)

    win10改win7鼠标无反应(win10改win7鼠标无反应bios)

  • 前端跨域解决方案(前端跨域解决方案设计)

    前端跨域解决方案(前端跨域解决方案设计)

  • 无票收入小规模怎么报增值税
  • 小规模税控盘抵扣增值税报表怎么填
  • 礼品进项怎么做进项转出
  • 工商年报纳税总额怎么算
  • 个人所得税怎么扣
  • 公司开户费用都包括哪些
  • 子公司分红对合并报表的影响
  • 亏损企业要做业务处理吗
  • 发票认证延期抵扣啥意思
  • 旧房转让土地增值税扣除项目
  • 转让房产的单位和个人都需要缴纳契税吗?
  • 公司偷税漏税是当事人责任大还是法人责任大
  • 合并报表中长期股权投资包括
  • 固定资产预计净残值最后怎么处理
  • 少交了增值税怎么补
  • 税控机操作
  • 国家税务总局公告2023年第1号
  • 公司注销的流程和费用
  • 销售二手设备税率
  • 公司员工餐费会计分录
  • 我的初级备考经历怎么写
  • 接受捐赠物品的增值税
  • 运输费计入什么会计分录
  • 土地价款扣除会计分录
  • 投资收益或亏损影响营业利润吗
  • php数组可以使用哪些键名
  • 当月发生的费用下月支付
  • 核定征收怎么申报个人经营所得
  • 软件入无形资产还是长期待摊费用了
  • php删除数组中重复的元素
  • 从奎雷英山口看到的 Leum na Luirginn湖和Cleat湖,英国斯凯岛 (© Sebastian Wasek/Sime/eStock Photo)
  • 生产经营个人所得税速算扣除数表
  • 超限量发票申请下来后怎么操作
  • 旅行费发票
  • 金税盘发票数据导出不完整
  • uniapp微信小程序广告
  • linux 高并发网络编程
  • 核销已计提坏账的应收账款
  • 商会年会活动策划方案模板
  • 残疾基金出什么科目
  • 帝国cms调用api接口
  • 利息收入算什么会计科目
  • 企业会计准则是属于什么
  • 收到费用报销单据应该怎么记账?
  • 房租押金不退还的账务怎么处理
  • 期末进行存货清查
  • 产假工资扣税
  • 企业所得税研发费用加计扣除例题
  • 固定资产盘亏所得税清算时怎么处理
  • 已付款未认证发票怎么做账
  • 上年的原材料发票可以算今年的成本吗
  • 复利年金终值计算器
  • 缴纳注册资金印花税怎么做账
  • 商业企业的会计科目设置
  • window系统怎么查看
  • Linux系统复制图片
  • linux监视内存详细信息命令
  • win7系统只有一个鼠标箭头然后重启
  • win8如何安装win10系统
  • 微软宣布将AI引入Office套件
  • mac u 盘启动
  • 将windows的文件上传到ubuntu
  • linux必学的60个命令及使用
  • win7ie8和ie11
  • cocos2dx用什么ide
  • opengl glm库
  • python 编码声明
  • python下载百度云文件
  • 浅析科学发展观的核心立场
  • Android AsyncTaskLoader需要注意的问题
  • javascript深入理解
  • 开发流程和步骤
  • Android Adapter 源码笔记(3)
  • u3d脚本语言
  • Button.setOnClickListener(OnClickListener l) 原理
  • javascript入门教学
  • 合肥地税局客服电话
  • 税法查询系统
  • 如何查询企业是小规模还是一般
  • 东莞房地产协会副会长
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设