이 게시물에,우리는 것이 논의 다양한 방법으로 초기화 목록에서 Java 에서 하나의 라인입니다.자바는 종종 장황함에 대해 비판을받습니다.,structing it, storing it in a variable, invoking add() method on it n times, and then maybe wrapping it to make it unmodifiable:
1
2
3
4
5
6
7
List<String> list = new ArrayList<>();
list.,추가(“C”);
목록.추가(“C++”);
목록.나는 이것이 내가하는 일이 아니라는 것을 알고 싶다.unmodifiableList(목);
이 게시물에,우리는 것이 논의 다양한 방법으로 초기화 목록에 단일 식입니다.
배열.asList()
Arrays.asList()는 지정된 배열로 뒷받침되는 고정 크기 목록을 반환합니다. 배열을 구조적으로 수정할 수 없으므로 목록에 요소를 추가하거나 요소를 제거 할 수 없습니다., The list will throw an UnsupportedOperationException if any resize operation is performed on it.
If we need a List that can expand or shrink, we can use –
1
List<String> list = new ArrayList<>(Arrays.,asList(“C”,”C++”,”Java”));
Java 집
컬렉션 클래스로 구성되어 있의 몇 가지 정적 방법에서 작동하는 컬렉션을 반환하는 새로운 컬렉션을 뒷받침하여 지정된 컬렉션입니다.
⮚컬렉션.addAll()
Collections.addAll()는 지정된 모든 요소를 지정된 컬렉션에 추가합니다. 추가 할 요소는 개별적으로 또는 배열로 지정할 수 있습니다., When elements are specified individually, this method provides a convenient way to add a few elements to an existing collection:
또는 다른 컬렉션의 복사 생성자를 사용하여 컬렉션을 채울 수 있습니다. 이러한 방법 중 하나는Collections.unmodifiableList()지정된 목록의 수정 불가능한 뷰를 반환합니다. 반환 된 목록을 수정하려고 시도하면UnsupportedOperationException가 발생합니다.
⮚컬렉션.,singletonList()
경우리 목록을 포함하는 단 하나의 요소,우리가 사용할 수 있는Collections.singletonList()반환하는 불변의 목록을 포함하는 요소입니다. 목록에 수정 작업이 수행되면UnsupportedOperationException가 발생합니다.
1
List<문자열>목=컬렉션이 있습니다.,두 번 중괄호 초기화
또 다른 대안은”이중 중괄호 초기화”를 사용하는 것입니다. 이것은 인스턴스 이니셜 라이저 만있는 익명의 내부 클래스를 만듭니다. 이 기술해야 최고의 피로 그것은 추가 비용 클래스에서 각각의 사용과 그것은 또한 보유하고 숨겨진에 대한 참조를 둘러싸는 인스턴스를 어떤 캡쳐 개체입니다. 이로 인해 메모리 누수가 발생하거나 직렬화에 문제가 발생할 수 있습니다.,v>2
3
4
5
List<문자열>list=new ArrayList<문자열>(){{
추가한다(“C”);
추가한다(“C++”);
추가한다(“Java”);
}};
Java8
Java8Stream API 를 구성하는 데 사용할 수 있는 작은 목록을 획득하여 스트림에서는 정적 공장 방법 및 축적하는 입력한 요소로 목록을 사용하여 수집., For example,
⮚ Collectors.toList()
Collectors.toList() returns a Collector that accumulates the input elements into a new List.
1
2
List<String> list = Stream.of(“C”, “C++”, “Java”)
.collect(Collectors.toList());
⮚ Collectors.,toCollection()
The streams collectors make no guarantee on the type of the List returned by toList(). To ensure the returned List is ArrayList, we can use toCollection(Supplier) as shown below:
1
2
List<String> list = Stream.,나는 이것을 할 수 없다.수집(수집가.나는 이것이 내가 할 수있는 일이 아니라는 것을 알고 있지만,나는 이것이 내가 할 수있는 일이 아니라는 것을 알고 싶다.collectingAndThen()
추가 마무리 변환을 수행하기 위해 컬렉터를 적용 할 수 있습니다., 예를 들어,우리에 적용할 수 있는toList()하기 위하여 항상 생산하는 수정할 목록과 함께
Java9
Java9 편리하게 인스턴스를 만들의 목록과 함께 작은 숫자의 요소에 의해 제공하는Lists.of()정적 공장 방법을 만드는 컴팩트,인스턴스를 수정할 수 없습니다., For example,
Java 9 provides 12 overloaded versions of this method –
Note there is a var-args version which can handle any number of elements., 이제 명백한 질문은 Var-args 만 충분할 수있을 때 Java9 가 왜 그렇게 많은 추가 메소드를 포함 시켰는가하는 것입니다. 그 이유는 미묘한 런타임 성능 이점이 있기 때문입니다. Var-args 버전은 varargs 를 사용하지 않는 overloadings 보다 느리게 실행될 가능성이 높습니다. 이는 varargs 메서드를 호출 할 때마다 배열 할당 및 초기화가 발생하고 GC 오버 헤드를 잊지 않기 때문입니다.
의 Javadoc 목록 인스턴스에 의해 만들어List.of()는 다음과 같은 특징이 있습니다.
그들이 구조적으로 변경할 수 없습니다., 요소를 추가,제거 또는 바꿀 수 없습니다. 모든 mutator 메서드를 호출하면 항상UnsupportedOperationException가 발생합니다. 그러나 포함 된 요소 자체가 변경 가능한 경우 목록의 내용이 변경되는 것처럼 보일 수 있습니다.
그들은 널 요소를 허용하지 않습니다. Null 요소로 생성하려고 시도하면NullPointerException가 발생합니다.
모든 요소가 직렬화 가능한 경우 직렬화 가능합니다.
목록에있는 요소의 순서는 제공된 인수 또는 제공된 배열의 요소의 순서와 동일합니다.,
그들은 가치 기반입니다. 호출자는 반환 된 인스턴스의 신원에 대한 가정을하지 않아야합니다. 팩토리는 새 인스턴스를 만들거나 기존 인스턴스를 다시 사용할 수 있습니다. 따라서,id-민감한 작업에서 이러한 인스턴스(참고 평등(==),신원,해시 코드와 동기화)은 신뢰할 수 없으므로 피해야 합니다.,
If we need a List that can expand or shrink, we can use –
1
List<String> list = new ArrayList<>(List.,클래스의 정적 메소드와 달리 인터페이스의 정적 메소드는 상속되지 않으므로 구현 클래스를 통해 호출 할 수 없으며 인터페이스 유형의 인스턴스를 통해 호출 할 수 없습니다.
Guava
Guava 는 또한 목록 인스턴스와 관련된 몇 가지 정적 유틸리티 방법을 제공합니다.,
초기화 목록을 사용하여 구아바에서 Java
Apache Commons 집
Apache Commons 집ListUtils클래스가 제공하는unmodifiableList()반환하는 수정할 목록 지원 주어진 목록입니다. 가 발생한NullPointerException경우 주어진 목록은 null 이 아니고 있는UnsupportedOperationException경우 수정하는 작업이 수행됩니다.피>