Массив 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]