参考文档1:包含诸多类中方法的使用
参考文档2: 删除列表中的元素[1. 使用remove方法删除指定元素(索引、元素)2. 迭代器遍历找到后删除]
参考文档3:更多介绍ArrayList的内容

ArrayList - 图1

注意事项

  • ArrayList可以存储null
  • ArrayList是由数组实现存储的
  • ArrayList是线程不安全类,线程安全用Vector类

    深入理解

  1. ArrayList中维护了一个Object类型的数组elelentData

transient Object[] elementData
transient 表示该属性不会被序列化

  1. 当创建ArrayList对象时,如果使用无参构造器,则初始化elementData容量为0,第一次添加,扩容到10,如果需要再次扩容,则扩容为1.5倍
  2. 当创建ArrayList对象时使用带参(指定大小)构造器,则初始化elementData为指定大小,如果需要扩容,则直接扩容为1.5倍
  1. //探究底层源码
  2. public static void main(String[] args) {
  3. //使用无参构造器创建ArrayList对象
  4. ArrayList list = new ArrayList();
  5. //使用带参构造器
  6. // ArrayList list = new ArrayList(0);
  7. // ArrayList list = new ArrayList(8);
  8. //使用for循环给list集合添加 1-10 数据
  9. for (int i = 1; i <= 10; i++) {
  10. list.add(i);
  11. }
  12. //使用for循环给list集合添加 11-15 数据
  13. for (int i = 11; i <= 15; i++) {
  14. list.add(i);
  15. }
  16. list.add(100);
  17. list.add(200);
  18. list.add(null);
  19. for (Object o : list) {
  20. System.out.println(o);
  21. }
  22. }

如何更好地使用ArrayList

  1. 确定所需存储空间的大小后在初始化ArrayList时可以指定其大小
  2. 确定不需要多余的存储空间时可以调用 trimToSize() 函数释放存储空间,Java不会自动帮我们释放。

数组与ArrayList之间的相互转换

数组 —> ArrayList

使用Arrays类的asList()方法

  1. public static void main(String[] args) {
  2. ArrayList<Cat> cats = new ArrayList<>();
  3. Cat thomas = new Cat("Thomas");
  4. Cat behemoth = new Cat("Behemoth");
  5. Cat lionel = new Cat("Lionel Messi");
  6. Cat fluffy = new Cat ("Fluffy");
  7. Cat[] catsArray = {thomas, behemoth, lionel, fluffy};
  8. ArrayList<Cat> catsList = new ArrayList<>(Arrays.asList(catsArray));
  9. System.out.println(catsList);
  10. }

Output:
[Cat{name=’Thomas’}, Cat{name=’Behemoth’}, Cat{name=’Lionel Messi’}, Cat{name=’Fluffy’}]

ArrayList —> 数组

直接使用ArrayList对象的public <T> T[] toArray(T[] a)方法

  1. import java.util.ArrayList;
  2. import java.util.Comparator;
  3. class Main {
  4. public static void main(String[] args){
  5. // 创建一个动态数组
  6. ArrayList<String> sites = new ArrayList<>();
  7. sites.add("Runoob");
  8. sites.add("Google");
  9. sites.add("Wiki");
  10. sites.add("Taobao");
  11. System.out.println("网站列表: " + sites);
  12. // 创建一个新的 String 类型的数组
  13. // 数组长度和 ArrayList 长度一样
  14. String[] arr = new String[sites.size()];
  15. // 将ArrayList对象转换成数组
  16. sites.toArray(arr);
  17. // 输出所有数组的元素
  18. System.out.print("Array: ");
  19. for(String item:arr) {
  20. System.out.print(item+", ");
  21. }
  22. }
  23. }

image.png

使用public Object[] toArray()方法

  1. public static void main(String[] args){
  2. // 创建一个动态数组
  3. ArrayList<String> sites = new ArrayList<>();
  4. sites.add("Runoob");
  5. sites.add("Google");
  6. sites.add("Wiki");
  7. sites.add("Taobao");
  8. System.out.println("网站列表: " + sites);
  9. // 将 ArrayList 对象转换成数组
  10. // 该方法没有参数
  11. Object[] obj = sites.toArray();
  12. // 输出数组中所有的元素
  13. System.out.print("Array: ");
  14. for(Object item : obj) {
  15. System.out.print(item+", ");
  16. }
  17. }

image.png