ArrayList使用

声明: 本文主要作为作者的复习笔记,由于作者水平有限,难免有错误和不准确之处,欢迎读者批评指正.

ArrayList实现的接口

  • RandomAccess: 实现这个接口就具备了随机访问的能力,给一个索引下标,可以立即O(1)取得该位置的元素;
  • Cloneable: 可复制的能力;
  • List: 线性表接口;
  • Serializable: 序列化接口,ArrayList这个类就可以方便的转为字节数组进行输入输出;

List下关于动态数组的实现有两个子类ArrayList和Vector

  1. ArrayList和Vector都是基于动态数组的实现;
  2. ArrayList是异步操作,线程不安全,效率高;
  3. Vector是同步操作(对整个数组进行加锁操作,线程安全,效率比较低);
  4. 现在Vector已经很少使用了,要使用线程安全的动态数组,使用juc包下CopyOnWriteArrayList(更加细化的读写锁机制来保证线程安全);

关于ArrayList的构造方法

方法解释
ArrayList()无参构造
ArrayList(Collection<? extends E> c)利用其他 Collection 构建 ArrayList,复制别的List集合的元素作为自己的初始化元素
ArrayList(int initialCapacity)指定顺序表初始容量,根据用户传入的长度指定内部的数组初始化长度

List接口中的常用方法

在接口中定义的这些方法,无论哪个具体子类都需要实现; 更换具体子类,使用的方法完全不变;
常用操作方法
remove方法
此时ArrayList中remove方法名称都一样,重载; 当List集合保存的就是整型,调用remove方法默认会调用按照索引删除; 若想按值删除,先调用indexOf方法获取该数值在List集合中对应的索引,然后调用remove删除对应的索引即可;

什么是遍历

  • 就是按照一定的规则将集合中的所有元素全部访问一遍,做到不重复,不遗漏,这种操作集合的方式称为集合的遍历;
  • 打印输出只是遍历的一种体现,遍历并不只是打印输出;

关于ArrayList的三种不同的遍历方式

  1. 普通for循环 + get方法进行遍历
  2. for-each循环(Iterable接口的子类都可使用for-each循环);
  3. 使用集合的迭代器(专门为了遍历一个集合产生的),对于List集合的子类,有一个接口Iterator接口,从前向后遍历:
    hasNext() => 判断集合是否还有元素没有遍历
    next() => 取出当前要遍历的元素
    调用ArrayList的listIterator()方法就可以取得当前集合的迭代器;

这三种遍历方式,用哪一个

  • 只是普通遍历,不牵扯到集合内容的修改时,用哪个都可以;
  • 但是,若在遍历的过程中,修改(add set remove)了集合的内容,要使用迭代器方式;
  • 在遍历一个集合的同时修改了这个集合,假设我们这个集合是由多个用户同时访问的,其中一个用户修改了该集合的内容,其他用户就可能看到不一样的结果;
  • 尽量不要在集合遍历的时候修改元素,若一定要修改,使用迭代器来修改;
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值