Иногда нам нужно преобразовать массив в ArrayList на Java, но как сделать это правильно и эффективно? Сегодня мы будем рассматривать два способа конвертации Array в ArrayList.
Arrays.asList(T… a)
— простой и быстрый способ преобразовать массив в ArrayList в Java, но этот метод возвращает исходный массив в виде ArrayList. Результирующий ArrayList будет фиксированного размера и любая попытка изменить в нем что-то приведет к UnsupportedOperationException
во время выполнения. Кроме того, любое изменение в массиве также изменит элементы в ArrayList!
Collections.addAll(ArrayList strList, T[] strArr)
— лучший способ преобразовать Array в ArrayList, потому что массив данных копируется в список в виде самостоятельного объекта. А это значит, что исходный массив и результирующий ArrayList будут независимы друг от друга.
Теперь давайте посмотрим эти методы в действии:
ArrayToArrayList.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package ua.com.prologistic; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; // здесь мы покажем разницу между методами, которые копируют Array в ArrayList public class ArrayToArrayList { public static void main(String[] args) { String[] arrayOfStrings = {"1", "2", "3", "4"}; List<String> listOfStrings = new ArrayList<String>(); // возвращает массив в виде списка // любое изменение в массиве приведет к изменению в списке ArrayList listOfStrings = Arrays.asList(arrayOfStrings); System.out.println("Полученный ArrayList с помощью метода Arrays.asList()"); for (String str : listOfStrings) System.out.print(" " + str); // изменяем элемент в массиве и видим, что элемент также меняется и в списке. arrayOfStrings[0] = "5"; System.out.println("\nИзменения в массиве повлияли и на ArrayList"); for (String str : listOfStrings) System.out.print(" " + str); // код ниже выбросит java.lang.UnsupportedOperationException, потому что // Arrays.asList() возвращает список фиксированного размера. Этот размер зависит от размера исходного массива //listOfStrings.add("5"); listOfStrings = new ArrayList<String>(); Collections.addAll(listOfStrings, arrayOfStrings); // Изменяет и массив, и ArrayList для проверки на взаимозависимость элементов? listOfStrings.add("5"); arrayOfStrings[0] = "1"; System.out.println("\nArray в ArrayList с помощью метода Collections.addAll()"); for (String str : listOfStrings) System.out.print(" " + str); } } |
Результат выполнения программы будет таким:
1 2 3 4 5 6 |
Полученный ArrayList с помощью метода Arrays.asList() 1 2 3 4 Изменения в массиве повлияли и на ArrayList 5 2 3 4 Array в ArrayList с помощью метода Collections.addAll() 5 2 3 4 5 |
Здесь Вы найдете другие статьи по массивам в Java
Также читайте обратный способ: Как конвертировать ArrayList в массив на Java?
Заранее спасибо за информацию, но я попробовал… и никаких ошибок не произошло
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class main_class {
public static void main(String arg[]) {
String[] mass=new String[]{«1″,»2″,»3″,»4″};
List m= Arrays.asList(mass);
mass[1]=»5»;
System.out.println(m);
}
}
Так их и не должно было быть.
А какие ошибки ты ожидал и почему?