Массив Java не может расти. Чтобы создать расширяемый массив, мы можем использовать ArrayList или Vector.

Классы ArrayList и Vector работают одинаково, за исключением того, что методы класса Vector синхронизированы, а методы класса ArrayList — нет.

Класс ArrayList работает только с объектами, а не с примитивными типами данных.

Класс ArrayList является универсальным классом и принимает тип своих элементов в качестве параметра типа.

Чтобы работать с примитивными значениями, объявите ArrayList одного из классов-оболочек. Например, используйте ArrayList‹Integer› для работы с элементами int.

Пример

Следующий фрагмент кода иллюстрирует использование класса ArrayList:

import java.util.ArrayList;
/*ww  w  . j av a2 s  . c  o m*/
public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> ids = new ArrayList<>();
    int total = ids.size(); // total will be zero
    System.out.println("ArrayList size is  " + total);
    System.out.println("ArrayList elements are   " + ids);
    ids.add(new Integer(10)); // Adding an Integer object.
    ids.add(20); // Autoboxing
    ids.add(30); // Autoboxing
    total = ids.size(); // total will be 3
    System.out.println("ArrayList size is  " + total);
    System.out.println("ArrayList elements are   " + ids);
    ids.clear();
    total = ids.size(); // total will be 0
    System.out.println("ArrayList size is  " + total);
    System.out.println("ArrayList elements are   " + ids);
  }
}

Приведенный выше код генерирует следующий результат.

ArrayList size is 0
ArrayList elements are []
ArrayList size is 3
ArrayList elements are [10,20,30]
ArrayList size is 0
ArrayList elements are []

Пример 2

Как и массивы, ArrayList использует индексацию с отсчетом от нуля. Первый элемент ArrayList имеет нулевой индекс.

Следующий код иллюстрирует использование цикла for для перебора элементов ArrayList.

import java.util.ArrayList;
//from  ww  w .ja  v  a2s  .c  o m
public class Main {
  public static void main(String[] args) {
    ArrayList<String> namelist = new ArrayList<String>();
    // Add some names
    namelist.add("A");
    namelist.add("B");
    namelist.add("C");
    // Get the count of names in the list
    int count = namelist.size();
    for (int i = 0; i < count; i++) {
      String name = namelist.get(i);
      System.out.println(name);
    }
    namelist.remove("A");
    count = namelist.size();
    for (int i = 0; i < count; i++) {
      String name = namelist.get(i);
      System.out.println(name);
    }
  }
}

Приведенный выше код генерирует следующий результат.

A
B
C
B
C

Преобразование ArrayList/Vector в массив

Класс ArrayList имеет перегруженный метод toArray():

Object[]     toArray( )
<T> T[]      toArray(T[ ] a)

Первый метод возвращает элементы ArrayList как массив Object. Второй метод принимает в качестве аргумента массив любого типа.

В следующем коде показано, как преобразовать ArrayList в массив.

import java.util.ArrayList;
import java.util.Arrays;
//w ww .j a va2  s. co m
public class Main {
  public static void main(String[] args) {
    ArrayList<String> al = new ArrayList<String>();
    al.add("Java");
    al.add("SQL");
    al.add("Data");
    System.out.println("ArrayList:" + al);
    String[] s1 = new String[al.size()];
    String[] s2 = al.toArray(s1);
    System.out.println("s1 == s2:" + (s1 == s2));
    System.out.println("s1:" + Arrays.toString(s1));
    System.out.println("s2:" + Arrays.toString(s2));
    s1 = new String[1];
    s1[0] = "hello"; // Store hello in first element
    s2 = al.toArray(s1);
    System.out.println("s1 == s2:" + (s1 == s2));
    System.out.println("s1:" + Arrays.toString(s1));
    System.out.println("s2:" + Arrays.toString(s2));
  }
}

Приведенный выше код генерирует следующий результат.

ArrayList:" + al);
s1 == s2:true
s1:[Java,SQL,Data]
s2:[Java,SQL,Data]
s1 == s2:false
s1:[hello]
s2:[Java,SQL,Data]