ArrayList使用

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

目录快捷跳转

    • ArrayList实现的接口
    • List下关于动态数组的实现有两个子类ArrayList和Vector
    • 关于ArrayList的构造方法
    • List接口中的常用方法
    • 什么是遍历
    • 关于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 c) 利用其他 Collection 构建 ArrayList,复制别的List集合的元素作为自己的初始化元素
ArrayList(int initialCapacity) 指定顺序表初始容量,根据用户传入的长度指定内部的数组初始化长度

List接口中的常用方法

在接口中定义的这些方法,无论哪个具体子类都需要实现; 更换具体子类,使用的方法完全不变;
ArrayList使用_第1张图片
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)了集合的内容,要使用迭代器方式;
  • 在遍历一个集合的同时修改了这个集合,假设我们这个集合是由多个用户同时访问的,其中一个用户修改了该集合的内容,其他用户就可能看到不一样的结果;
  • 尽量不要在集合遍历的时候修改元素,若一定要修改,使用迭代器来修改;

你可能感兴趣的:(数据结构,Java,java,数据结构)