原文: https://javatutorial.net/java-arraylist-example

Java ArrayList类是实现List接口的可调整大小的数组。 它允许所有元素(包括null),并且实现所有可选列表操作。 可以在ArrayList上运行的大多数操作,例如sizeisEmptygetsetiteratorlistIterator都是恒定时间。 但是,add操作的复杂度为O(n)时间。与LinkedList相比,常数因子低。

Java `ArrayList`示例 - 图1

ArrayList的优点

  • 动态添加或删除元素的能力。
  • ArrayList使用数组作为其基础实现,这使ArrayList类可以更快地访问元素。
  • 灵活性。
  • ArrayList是面向对象的,因此您可以从中扩展并添加功能(如果需要)。
  • ArrayList添加自定义行为是可能的,甚至很容易实现。

ArrayList的局限性

  • 添加元素需要O(n)时间。
  • ArrayList将数据顺序存储在内存中,因此,如果列表很大,则将需要大量连续的内存块。
  • ArrayList的初始容量为 10,如果不指定容量,则将受到性能限制。 每当ArrayList达到其自身容量时,数据将以 50% 以上的容量从旧空间复制到新空间。

ArrayList的简单说明

Java `ArrayList`示例 - 图2

Java 中的ArrayList

从上图可以看到,ArrayList中当前有 2 个元素,可以添加的最大元素数量(容量)为 8(或 6 个以上)。

ArrayList中的构造方法

  1. ArrayList() – 构造一个初始容量为 10 的空列表。
  2. ArrayList(Collection <? extended E> c) – 构造一个列表,该列表包含指定集合的元素,并按集合的迭代器返回它们的顺序。
  3. ArrayList(int initialCapacity) – 构造一个具有指定初始容量的空列表。

ArrayList类中的方法

  1. boolean add(E e):将指定的元素附加到列表的末尾。
  2. void add(int index, E element):将指定的元素插入列表中的指定位置。
  3. boolean addAll(Collection <? extends E> c):将指定集合中的所有元素附加到列表的末尾,以指定集合的Iterator返回它们的顺序。
  4. boolean addAll(int index, Collection <? extends E> c):从指定位置开始,将集合中的所有元素插入列表。
  5. void clear():从列表中删除所有元素。
  6. boolean contains(Object o):如果列表包含指定的元素,则返回true;否则返回false
  7. void ensureCapacity(int minCapacity):如果有必要确保列表可以容纳最小容量参数指定的所有元素,则增加列表的容量。
  8. void forEach(Consumer<? super E> action):对已循环通过的每个元素执行给定的动作。
  9. int indexOf(Object o):如果列表不包含元素,则返回 -1。 但是,如果元素存在于列表中,则它返回此列表中指定元素首次出现的索引。
  10. boolean isEmpty():如果列表不包含任何元素,则返回true
  11. Iterator<E> iterator():以适当的顺序返回列表中元素的迭代器。
  12. int lastIndexOf(Object o):返回列表中指定元素最后一次出现的索引;如果列表中不存在该元素,则返回 -1。
  13. boolean remove(Object o):从列表中删除第一次出现的指定对象。
  14. boolean removeAll(Collection<?> c):从列表中删除指定集合中包含的所有元素。
  15. boolean removeIf(Predicate<? super E> filter):移除此集合中所有满足给定谓词的元素。
  16. void removeRange(int fromIndex, int toIndex):删除列表中fromIndextoIndex之间的所有元素。(fromIndex–包括在内,toIndex–排除在外)
  17. void replaceAll(UnaryOperator<E> operator):使用将运算符应用于该元素的结果替换列表中的每个元素。
  18. boolean retainAll(Collection<?> c):仅返回指定集合中包含的列表中的元素。
  19. int size():返回列表的大小。
  20. void sort(Comparator<? super E> c):根据Comparator指定的顺序对列表进行排序。
  21. Object[] toArray():返回包含列表中包含的元素的数组。

有关所有方法的文档,请访问 Oracle 官方文档页面

使用add()ArrayList中添加元素

  1. import java.util.* ;
  2. public class ArrayListEgTwo
  3. {
  4. public static void main ( String[] args)
  5. {
  6. // Create an ArrayList that consists of Strings
  7. ArrayList<String> animals = new ArrayList<String>();
  8. // Capacity starts at 10, but size starts at 0
  9. System.out.println("initial size: " + animals.size());
  10. // Populating some of the arraylist
  11. animals.add("Elephant");
  12. animals.add("Tiger");
  13. animals.add("Lion");
  14. System.out.println("new size: " + animals.size());
  15. }

输出

  1. size: 0
  2. new size: 3

使用remove()移除ArrayList中的元素

  1. import java.util.* ;
  2. public class RemoveExample
  3. {
  4. public static void main ( String[] args)
  5. {
  6. ArrayList<String> animals = new ArrayList<String>();
  7. animals.add( "Elephant" );
  8. animals.add( "Tiger" );
  9. animals.add( "Lion" );
  10. names.remove(1);
  11. for ( int i=0; i < animals.size(); i++ )
  12. System.out.println( i + ": " + animals.elementAt(j) );
  13. }
  14. }

输出

  1. 0: Elephant
  2. 1: Lion

使用isEmpty()检查ArrayList是否包含元素

  1. import java.util.* ;
  2. public class isEmptyExample
  3. {
  4. public static void main ( String[] args)
  5. {
  6. ArrayList<String> animals = new ArrayList<String>();
  7. System.out.println( "Case 0:" + animals.isEmpty());
  8. animals.add("Tiger");
  9. System.out.println( "Case 1:" + animals.isEmpty() );
  10. nobby.clear();
  11. System.out.println( "Case 2:" + animals.isEmpty() );
  12. }
  13. }

输出

  1. Case 0: true
  2. Case 1: false
  3. Case 2: true

使用indexOf(Object o)ArrayList中搜索元素

  1. import java.util.* ;
  2. public class IndexOfExample
  3. {
  4. public static void main (String[] args)
  5. {
  6. ArrayList<String> animals = new ArrayList<String>();
  7. animals.add("Elephant");
  8. animals.add("Tiger");
  9. animals.add("Lion");
  10. System.out.println("Index of 'Elephant': " + animals.indexOf("Elephant" ));
  11. System.out.println("Index of 'Lion': " + animals.indexOf("Lion"));
  12. }
  13. }

输出

  1. Index of 'Elephant': 0
  2. Index of 'Lion': 2

使用Iterator()遍历ArrayList中的元素

  1. import java.util.* ;
  2. public class IteratorExample
  3. {
  4. public static void main ( String[] args)
  5. {
  6. ArrayList<String> animals = new ArrayList<String>();
  7. animals.add("Elephant");
  8. animals.add("Tiger");
  9. animals.add("Lion");
  10. // Initializing an iterator
  11. Iterator<String> iterator = animals.iterator();
  12. // Using the iterator to visit each element
  13. while(iterator.hasNext())
  14. System.out.println(iterator.next());
  15. }
  16. }

输出

  1. Elephant
  2. Tiger
  3. Lion

使用增强的For循环遍历ArrayList中的元素

  1. import java.util.* ;
  2. public class ForLoopExample
  3. {
  4. public static void main ( String[] args)
  5. {
  6. ArrayList<String> animals = new ArrayList<String>();
  7. animals.add("Elephant");
  8. animals.add("Tiger");
  9. animals.add("Lion");
  10. for (String animal : animals)
  11. System.out.println(animal);
  12. }
  13. }

输出

  1. Elephant
  2. Tiger
  3. Lion

使用size()获取ArrayList的大小

  1. import java.util.* ;
  2. public class ForLoopExample
  3. {
  4. public static void main ( String[] args)
  5. {
  6. ArrayList<String> animals = new ArrayList<String>();
  7. animals.add("Elephant");
  8. animals.add("Tiger");
  9. animals.add("Lion");
  10. System.out.println("Size of ArrayList: " + animals.size());
  11. }
  12. }

输出

  1. Size of ArrayList: 3