1.空间大小

array是不可变的,必须事先控制其大小。arraylist是可扩容数组,每次扩大容量的0.5倍。

2.存放内容

array只能存放相同类型的元素,但存放对象可以是基本类型或者对象类型

arraylist可以存放不同类型的元素(object),但存放对象只能是对象类型,而且如果加上<>的话,就是指定类型了。

3.使用方法

arraylist在array的基础上增加了例如addall(),removeall(),iterator()等常用方法。注意:我们经常需要在遍历元素的同时对数组中的元素进行增删改,此时如果array的话,用增强for循环没有办法删除的,只能用普通for循环进行遍历,但是不能删除,因为数组长度是固定的,只能将对应的索引的值变化一下,等循环结束之后赋值给新数组。

而arraylist在普通for循环的时候,如果调用list.remove,会自动进行元素删除以及arrys.copyof方法(也就是新数组生成),所以如果边循环边删除的时候会出现一个问题,第一个问题是,被删除的相邻元素其实不会被访问到,被直接跳过了。

arraylist在增强for循环或者foreach中,其实都是在使用迭代器方法,但是他们只是查询用迭代器,并没有使用迭代器的删除方法(iterator.remove()),会出现只有modCount增加了,但是expectedModCount却没有变化,所以在进行list.remove()操作的时候,会在modCount==expectedModCount处出现错误,导致出现ConcurrentModificationException异常。

但是arrylist在用迭代器进行遍历并且进行删除的时候就不会出错,为什么呢,因为你会发现你在迭代器里面用的是 iterator.remove() ,去源码里面看你会发现,迭代器在使用list本身的删除方法之外(list.remove()),还让modCount==expectedModCount,这就使得两个变量一致了,再进行删除的时候,就不会报异常了。

4.应用场景

如果想要保存一些在整个程序运行期间都会存在而且不变的数据,我们可以将它们放进一个全局数组里,但是如果我们单纯只是想要以数组的形式保存数据,而不对数据进行增加等操作,只是方便我们进行查找的话,那么,我们就可以选择ArrayList。

而且还有一个地方是必须知道的,就是如果我们需要对元素进行频繁的移动或删除,或者处理的是超大量的数据,那么,使用ArrayList就真的不是一个好的选择,因为它的效率很低,使用数组进行这样的动作就很麻烦,那么,我们可以考虑选择LinkedList。

复习-arrary和arraylist的对比以及arraylist的遍历中删除的原理相关推荐

  1. 关于ArrayList和LinkedList的插入,遍历,删除时间比照

    仅仅是自己电脑上测试,有可能不同配置的电脑有些差距,以下是代码块: package list; import java.util.ArrayList; import java.util.LinkedL ...

  2. Java List与ArrayList 的区别(List list =new Arraylist(); ArrayList<String> arrayList = new ArrayList())

    一般想知道List 与ArrayList 的区别可能大部分都是看到了 List list = new ArrayList(); 和 ArrayList arrayList = new ArrayLis ...

  3. ArrayList集合为什么不能使用foreach增加、删除、修改元素

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:奋斗的小程序员 toutiao.com/a675432260 ...

  4. Java的ArrayList集合_JAVA之ArrayList集合

    /** * ArrayList集合讲解 * 集合的添加.遍历.删除 */ package com.test; import java.util.*; public class test7 { /** ...

  5. java arraylist 对象 删除_如何从Java中的ArrayList对象中删除冗余元素?

    接口集不允许重复的元素.茶add() 此接口的方法接受元素并添加到Set对象,如果添加成功,则如果您尝试使用此方法添加现有元素,则返回true,添加操作将返回false. 因此,要删除ArrayLis ...

  6. 如何正确的在一个循环中删除ArrayList中的元素。

    为什么80%的码农都做不了架构师?>>>    如果使用普通for循环直接删除会出现IndexOutOfBoundsException异常,非法索引. ArrayList<St ...

  7. 线性表、顺序表以及ArrayList、Iterable、Collection、List中重要的方法

    线性表基本概念 线性表(linear list)是n个具有相同特性的数据元素的有限序列. 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表.链表.栈.队列.字符串 线性表在逻辑上是线性结构 ...

  8. 如何在Java中处理ConcurrentModificationException? 在循环中从ArrayList中删除元素时要当心...

    从Java中从ArrayList中删除元素时常见的问题之一是ConcurrentModificationException. 如果您对索引使用经典的for循环或增强的for循环,并尝试使用remove ...

  9. ArrayList clone()– ArrayList深拷贝和浅拷贝

    示例程序以ArrayList克隆方法为例. 学生对象上的ArrayList深层复制和浅层复制示例. 1.简介 ArrayList clone()– ArrayList深复制和浅复制 . ArrayLi ...

  10. Lession11 集合和泛型(ArrayList方法、Arraylist类、ArrayList添加对象、ArrayList长度、HashTable类、Hashtable类练习-----)

    目录 ArrayList方法: ArrayList添加对象: Arraylist类: ArrayList长度: HashTable类: Hashtable类练习: IComparable泛型接口排序: ...

最新文章

  1. for语句的执行过程_带你深入了解Java流程控制语句
  2. Flowable 数据库表结构 ACT_ID_USER
  3. 简约响应式导航主题VIK_WordPress模板
  4. python调用库函数用ecb模式加密图片_python 实现AES加密解密(ECB模式,配合base64)...
  5. HTML5网站大观:10个精美的 HTML5 企业网站欣赏
  6. ArcGIS10.8安装(附最新<2022年10月29日>下载地址)
  7. 最新版微信上墙功能齐全无BUG版大屏幕+演示系统常用主题和音乐
  8. DSP入门小白学习日记第二篇
  9. 如何把很多照片拼成一张照片_如何将多张图片合成一个PDF文件
  10. php中的oop思想,oop_php oop思想_oop和ood
  11. 412 Precondition Failed
  12. OutLook邮件中设计添加个性签名
  13. 为什么摇滚的人害羞_并非每个人都需要成为摇滚明星
  14. 短网址还原 php,php怎么实现短网址还原
  15. 培训班和科班出来的程序员有什么不同之处?看完这个你就能明白!
  16. 使用vue做一个“淘宝“项目——2
  17. 小白友好——C++基于EeayX简单开发的豪华版贪吃蛇[单人模式+双蛇对战+闯关模式(地图跳转)+排行榜+音乐]
  18. 举着一片片小小柔柔的叶子
  19. LearnOpenGL-CN笔记(一)
  20. 2、python学习笔记第二课:python开发环境

热门文章

  1. Cocos2d—X游戏开发之VS2010 控制台输出中文,模拟器中文乱码问题解决
  2. pod BaiduMapKit 报错解决方案
  3. 关于在for循环中绑定事件打印变量i是最后一次。
  4. 编程题目:PAT 1006. 换个格式输出整数 (15)
  5. weblogic 找不到数据源问题
  6. 【OpenGL】glFinish()和glFlush()函数详解
  7. android sqlite 保存图片,android-如何将图像在Sqlite数据库中另存为blob?
  8. 两台笔记本用wifi建立局域网_无线通信技术——WiFi
  9. python plot画图_Python进阶之Matplotlib入门(四)
  10. 拓端tecdat|在R语言中显示美丽的数据摘要summary统计信息