다음과 같이 초기화된 배열이 있습니다.
Element[] array = {new Element(1), new Element(2), new Element(3)};
ArrayList
클래스의 객체로 변환하고 싶습니다.
ArrayList<Element> arraylist = ???;
질문자 :Ron Tuffin
다음과 같이 초기화된 배열이 있습니다.
Element[] array = {new Element(1), new Element(2), new Element(3)};
ArrayList
클래스의 객체로 변환하고 싶습니다.
ArrayList<Element> arraylist = ???;
new ArrayList<>(Arrays.asList(array));
주어진:
Element[] array = new Element[] { new Element(1), new Element(2), new Element(3) };
가장 간단한 대답은 다음을 수행하는 것입니다.
List<Element> list = Arrays.asList(array);
이것은 잘 작동합니다. 그러나 몇 가지 주의 사항:
ArrayList
로 래핑해야 합니다. 그렇지 않으면 UnsupportedOperationException
합니다.asList()
에서 반환된 목록은 원래 배열에 의해 뒷받침됩니다. 원래 배열을 수정하면 목록도 수정됩니다. 이것은 놀라운 것일 수 있습니다.(오래된 스레드이지만 아무도 Guava 또는 기타 라이브러리 및 기타 세부 사항에 대해 언급하지 않기 때문에 단 2센트)
이러한 속임수를 크게 단순화하는 Guava 방식을 지적할 가치가 있습니다.
ImmutableList
클래스와 해당 of()
및 copyOf()
팩토리 메서드를 사용합니다 (요소는 null일 수 없음) .
List<String> il = ImmutableList.of("string", "elements"); // from varargs List<String> il = ImmutableList.copyOf(aStringArray); // from array
Lists
클래스와 newArrayList()
팩토리 메소드를 사용하십시오:
List<String> l1 = Lists.newArrayList(anotherListOrCollection); // from collection List<String> l2 = Lists.newArrayList(aStringArray); // from array List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs
다른 클래스의 다른 데이터 구조에 대해서도 유사한 방법(예: Sets
유의하십시오.
주요 매력은 유형 안전을 위한 제네릭으로 인한 혼란을 줄이는 것입니다. Guava 팩토리 메소드를 사용하면 대부분의 경우 유형을 유추할 수 있기 때문입니다. 그러나 이 인수는 Java 7이 새로운 다이아몬드 연산자와 함께 도착한 이후로 더 적은 수의 물을 보유합니다.
그러나 이것이 유일한 이유는 아닙니다(그리고 Java 7이 아직 모든 곳에 있는 것은 아닙니다). 약식 구문도 매우 편리하고 위에서 본 것처럼 메서드 초기화 프로그램을 사용하면 보다 표현적인 코드를 작성할 수 있습니다. 하나의 Guava 호출로 현재 Java Collections로 2가 소요되는 작업을 수행합니다.
Collections.unmodifiableList()
래핑된 JDK의 Arrays
클래스와 asList()
팩토리 메소드를 사용하십시오.
List<String> l1 = Collections.unmodifiableList(Arrays.asList(anArrayOfElements)); List<String> l2 = Collections.unmodifiableList(Arrays.asList("element1", "element2"));
asList()
대한 반환 유형은 구체적인 ArrayList
구현을 List
java.util.ArrayList
가 아닙니다 . ArrayList
를 에뮬레이트하지만 실제로는 전달된 배열을 직접 참조하고 "쓰기"로 만드는 내부 유형입니다(수정 사항은 배열에 반영됨).
AbstractList
를 확장하는 방식으로 List
API의 일부 메서드를 통한 수정을 금지하지만(따라서 요소 추가 또는 제거는 지원되지 않음) set()
을 호출하여 요소를 재정의할 수 있습니다. 따라서 이 목록은 실제로 변경할 수 없으며 asList()
Collections.unmodifiableList()
로 래핑되어야 합니다.
변경 가능한 목록이 필요한 경우 다음 단계를 참조하세요.
위와 같지만 실제 java.util.ArrayList
래핑됩니다.
List<String> l1 = new ArrayList<String>(Arrays.asList(array)); // Java 1.5 to 1.6 List<String> l1b = new ArrayList<>(Arrays.asList(array)); // Java 1.7+ List<String> l2 = new ArrayList<String>(Arrays.asList("a", "b")); // Java 1.5 to 1.6 List<String> l2b = new ArrayList<>(Arrays.asList("a", "b")); // Java 1.7+
// for Java 1.5+ static <T> List<T> arrayToList(final T[] array) { final List<T> l = new ArrayList<T>(array.length); for (final T s : array) { l.add(s); } return (l); } // for Java < 1.5 (no generics, no compile-time type-safety, boo!) static List arrayToList(final Object[] array) { final List l = new ArrayList(array.length); for (int i = 0; i < array.length; i++) { l.add(array[i]); } return (l); }
이 질문은 꽤 오래되었기 때문에 아무도 아직 가장 간단한 형식을 제안하지 않았다는 사실에 놀랐습니다.
List<Element> arraylist = Arrays.asList(new Element(1), new Element(2), new Element(3));
Java 5부터 Arrays.asList()
는 varargs 매개변수를 사용하므로 명시적으로 배열을 구성할 필요가 없습니다.
new ArrayList<T>(Arrays.asList(myArray));
myArray
T
와 같은 유형인지 확인하십시오. 예를 들어 int
배열에서 List<Integer>
를 만들려고 하면 컴파일러 오류가 발생합니다.
성능 면 new ArrayList(Arrays.asList(array))
솔루션과 본질적으로 동일하지만 다른 방법은 다음과 같습니다.
Collections.addAll(arraylist, array);
Java 9 에서는 List.of
정적 팩토리 메서드를 사용하여 List
리터럴을 만들 수 있습니다. 다음과 같은 것:
List<Element> elements = List.of(new Element(1), new Element(2), new Element(3));
이렇게 하면 세 개의 요소가 포함 된 변경할 수 없는 목록이 반환됩니다. 변경 가능한 목록을 원하면 해당 목록을 ArrayList
생성자에 전달하십시오.
new ArrayList<>(List.of(// elements vararg))
JEP 269 는 Java Collections API에 대한 몇 가지 편리한 팩토리 메소드를 제공합니다. 이러한 불변의 정적 팩토리 메소드는 Java 9 이상에서 List
, Set
및 Map
아마도 ArrayList가 아닌 List가 필요할 것입니다. 이 경우 다음을 수행할 수 있습니다.
List<Element> arraylist = Arrays.asList(array);
2014년에 거의 끝나는 또 다른 업데이트는 Java 8에서도 수행할 수 있습니다.
ArrayList<Element> arrayList = Stream.of(myArray).collect(Collectors.toCollection(ArrayList::new));
List
수 있다면 몇 개의 문자가 저장될 것입니다.
List<Element> list = Stream.of(myArray).collect(Collectors.toList());
다음을 사용하는 경우:
new ArrayList<T>(Arrays.asList(myArray));
두 개의 목록을 만들고 채울 수 있습니다! 큰 목록을 두 번 채우는 것은 용량을 확장해야 할 때마다 Object[]
배열을 생성하기 때문에 하고 싶지 않은 일입니다.
다행히 JDK 구현은 빠르고 Arrays.asList(a[])
는 매우 잘 수행됩니다. Object[] 데이터가 직접 배열을 가리키는 Arrays.ArrayList라는 일종의 ArrayList를 만듭니다.
// in Arrays @SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } //still in Arrays, creating a private unseen class private static class ArrayList<E> private final E[] a; ArrayList(E[] array) { a = array; // you point to the previous array } .... }
위험한 측면은 초기 배열을 변경하면 List 가 변경된다는 것입니다! 정말 원하세요? 예, 아닐 수도 있습니다.
그렇지 않은 경우 가장 이해하기 쉬운 방법은 다음과 같습니다.
ArrayList<Element> list = new ArrayList<Element>(myArray.length); // you know the initial capacity for (Element element : myArray) { list.add(element); }
또는 @glglgl이 말했듯이 다음을 사용하여 다른 독립적인 ArrayList를 만들 수 있습니다.
new ArrayList<T>(Arrays.asList(myArray));
Collections
, Arrays
또는 Guava를 사용하는 것을 좋아합니다. 하지만 어울리지 않거나 느껴지지 않으면 다른 우아한 줄을 대신 쓰세요.
Java 9
에서는 다음을 사용할 수 있습니다.
List<String> list = List.of("Hello", "World", "from", "Java"); List<Integer> list = List.of(1, 2, 3, 4, 5);
질문에 따르면 Java 1.7을 사용한 답변은 다음과 같습니다.
ArrayList<Element> arraylist = new ArrayList<Element>(Arrays.<Element>asList(array));
그러나 항상 인터페이스를 사용하는 것이 좋습니다.
List<Element> arraylist = Arrays.<Element>asList(array);
// Guava import com.google.common.collect.ListsLists ... List<String> list = Lists.newArrayList(aStringArray);
Java 8 이후로 변환하는 더 쉬운 방법이 있습니다.
import java.util.List; import static java.util.stream.Collectors.toList; public static <T> List<T> fromArray(T[] array) { return Arrays.stream(array).collect(toList()); }
다른 방법을 사용하여 변환할 수 있습니다.
List<Element> list = Arrays.asList(array);
List<Element> list = new ArrayList();
Collections.addAll(list, array);
Arraylist list = new Arraylist();
list.addAll(Arrays.asList(array));
자세한 내용은 http://javarevisited.blogspot.in/2011/06/converting-array-to-arraylist-in-java.html을 참조하십시오.
모두가 말했듯이 이것은 그렇게 할 것입니다
new ArrayList<>(Arrays.asList("1","2","3","4"));
배열을 생성하는 가장 일반적인 최신 방법은 observableArrays입니다.
ObservableList: 변경 사항이 발생할 때 리스너가 변경 사항을 추적할 수 있도록 하는 목록입니다.
Java SE의 경우 시도해 볼 수 있습니다.
FXCollections.observableArrayList(new Element(1), new Element(2), new Element(3));
Oracle Docs 에 따르면
observableArrayList() arraylist가 지원하는 새로운 빈 관찰 가능 목록을 만듭니다. observableArrayList(E... items) 항목이 추가된 새로운 관찰 가능한 배열 목록을 만듭니다.
또한 Java 9에서는 약간 쉽습니다.
List<String> list = List.of("element 1", "element 2", "element 3");
Java 8에서 스트림을 사용하여 수행할 수도 있습니다.
List<Element> elements = Arrays.stream(array).collect(Collectors.toList());
Arrays.asList()
메서드의 정의를 보면 다음과 같은 결과를 얻을 수 있습니다.
public static <T> List<T> asList(T... a) //varargs are of T type.
따라서 다음과 같이 arraylist
초기화할 수 있습니다.
List<Element> arraylist = Arrays.asList(new Element(1), new Element(2), new Element(3));
참고 : 각각의
new Element(int args)
는 개별 객체로 취급되며var-args
로 전달될 수 있습니다.
이 질문에 대한 또 다른 대답도 있을 수 있습니다.
java.util.Collections.addAll()
메소드에 대한 선언을 보면 다음과 같은 결과를 얻을 수 있습니다.
public static <T> boolean addAll(Collection<? super T> c, T... a);
따라서 이 코드는 그렇게 하는 데에도 유용합니다.
Collections.addAll(arraylist, array);
또 다른 간단한 방법은 for-each 루프를 사용하여 배열의 모든 요소를 새 ArrayList에 추가하는 것입니다.
ArrayList<Element> list = new ArrayList<>(); for(Element e : array) list.add(e);
배열이 기본 유형인 경우 지정된 답변이 작동하지 않습니다. 그러나 Java 8부터 다음을 사용할 수 있습니다.
int[] array = new int[5]; Arrays.stream(array).boxed().collect(Collectors.toList());
이 질문에 완벽하게 작성된 답변이 많이 있지만 제 입력을 추가하겠습니다.
Element[] array = { new Element(1), new Element(2), new Element(3) };
새로운 ArrayList는 다음과 같은 방법으로 생성할 수 있습니다.
ArrayList<Element> arraylist_1 = new ArrayList<>(Arrays.asList(array)); ArrayList<Element> arraylist_2 = new ArrayList<>( Arrays.asList(new Element[] { new Element(1), new Element(2), new Element(3) })); // Add through a collection ArrayList<Element> arraylist_3 = new ArrayList<>(); Collections.addAll(arraylist_3, array);
그리고 ArrayList의 모든 작업을 매우 잘 지원합니다.
arraylist_1.add(new Element(4)); // or remove(): Success arraylist_2.add(new Element(4)); // or remove(): Success arraylist_3.add(new Element(4)); // or remove(): Success
그러나 다음 작업은 실제 ArrayList가 아닌 ArrayList의 목록 보기만 반환합니다.
// Returns a List view of array and not actual ArrayList List<Element> listView_1 = (List<Element>) Arrays.asList(array); List<Element> listView_2 = Arrays.asList(array); List<Element> listView_3 = Arrays.asList(new Element(1), new Element(2), new Element(3));
따라서 일부 ArrayList 작업을 수행하려고 할 때 오류가 발생합니다.
listView_1.add(new Element(4)); // Error listView_2.add(new Element(4)); // Error listView_3.add(new Element(4)); // Error
배열 링크 의 목록 표현에 대해 자세히 알아보십시오.
가장 간단한 방법은 다음 코드를 추가하는 것입니다. 시도하고 테스트했습니다.
String[] Array1={"one","two","three"}; ArrayList<String> s1= new ArrayList<String>(Arrays.asList(Array1));
또 다른 Java8 솔루션 (큰 세트 중에서 답을 놓쳤을 수 있습니다. 그렇다면 사과드립니다). 이것은 ArrayList(List와 반대)를 생성합니다. 즉, 요소를 삭제할 수 있습니다.
package package org.something.util; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Junk { static <T> ArrayList<T> arrToArrayList(T[] arr){ return Arrays.asList(arr) .stream() .collect(Collectors.toCollection(ArrayList::new)); } public static void main(String[] args) { String[] sArr = new String[]{"Hello", "cruel", "world"}; List<String> ret = arrToArrayList(sArr); // Verify one can remove an item and print list to verify so ret.remove(1); ret.stream() .forEach(System.out::println); } }
출력은...
안녕하십니까
세계
다음과 같이 Java 8에서 할 수 있습니다.
ArrayList<Element> list = (ArrayList<Element>)Arrays.stream(array).collect(Collectors.toList());
ArrayList
로 쉽게 변환할 수 있습니다. 한 목록에서 다른 목록으로 내용을 복사할 목적으로 Collection 인터페이스의 addAll()
Arraylist arr = new Arraylist(); arr.addAll(Arrays.asList(asset));
다음 코드를 사용하여 요소 배열을 ArrayList로 변환합니다.
Element[] array = {new Element(1), new Element(2), new Element(3)}; ArrayList<Element>elementArray=new ArrayList(); for(int i=0;i<array.length;i++) { elementArray.add(array[i]); }
주어진 객체 배열:
Element[] array = {new Element(1), new Element(2), new Element(3) , new Element(2)};
배열을 목록으로 변환:
List<Element> list = Arrays.stream(array).collect(Collectors.toList());
배열을 ArrayList로 변환
ArrayList<Element> arrayList = Arrays.stream(array) .collect(Collectors.toCollection(ArrayList::new));
배열을 LinkedList로 변환
LinkedList<Element> linkedList = Arrays.stream(array) .collect(Collectors.toCollection(LinkedList::new));
목록 인쇄:
list.forEach(element -> { System.out.println(element.i); });
산출
1
2
삼
이미 모든 사람들이 귀하의 문제에 대해 충분한 답변을 제공했습니다. 이제 모든 제안에서 요구 사항에 맞는 것을 결정해야 합니다. 알아야 할 컬렉션에는 두 가지 유형이 있습니다. 하나는 수정되지 않은 컬렉션이고 다른 하나는 나중에 개체를 수정할 수 있는 컬렉션입니다.
그래서 여기서는 두 가지 사용 사례에 대한 간단한 예를 보여 드리겠습니다.
불변 컬렉션 생성 :: 컬렉션 객체 생성 후 수정을 원하지 않는 경우
List<Element> elementList = Arrays.asList(array)
변경 가능한 컬렉션 생성 :: 생성된 컬렉션 객체를 생성 후 수정하고자 할 때.
List<Element> elementList = new ArrayList<Element>(Arrays.asList(array));
Java 8의 Arrays 클래스는 기본 배열과 객체 배열을 모두 허용하는 오버로드된 버전이 있는 stream() 메서드를 제공합니다.
/**** Converting a Primitive 'int' Array to List ****/ int intArray[] = {1, 2, 3, 4, 5}; List<Integer> integerList1 = Arrays.stream(intArray).boxed().collect(Collectors.toList()); /**** 'IntStream.of' or 'Arrays.stream' Gives The Same Output ****/ List<Integer> integerList2 = IntStream.of(intArray).boxed().collect(Collectors.toList()); /**** Converting an 'Integer' Array to List ****/ Integer integerArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; List<Integer> integerList3 = Arrays.stream(integerArray).collect(Collectors.toList());
아래 코드는 이를 수행하는 좋은 방법인 것 같습니다.
new ArrayList<T>(Arrays.asList(myArray));
출처 : 여기를 클릭하세요
출처 : http:www.stackoverflow.com/questions/157944/create-arraylist-from-array
cURL을 사용하여 JSON 데이터를 어떻게 게시합니까? (0) | 2021.10.05 |
---|---|
값으로 사전을 정렬하려면 어떻게 해야 합니까? (0) | 2021.10.05 |
서브모듈을 어떻게 제거합니까? (0) | 2021.10.05 |
이것은 !! (not not) JavaScript의 연산자? (0) | 2021.10.05 |
CSS에서 셀 패딩 및 셀 간격을 설정하시겠습니까? (0) | 2021.10.05 |