어레이 초기화와 동등한 Array List 초기화
인스턴스화 중에 다음과 같이 어레이를 초기화할 수 있습니다.
String[] names = new String[] {"Ryan", "Julie", "Bob"};
Array List array 、 array array array array array array array array array array array array array array array array array array array? 내용을 요?array.add()
Arrays.asList는 다음을 지원합니다.
new ArrayList<Integer>(Arrays.asList(1,2,3,5,8,13,21));
네.
new ArrayList<String>(){{
add("A");
add("B");
}}
하고 있는 은 ' 있다'는 '반'은 '반'을 만드는 것입니다.ArrayList<String>(바깥쪽 브레이스)세트는 이렇게 하고 나서 스태틱인테셜라이저(브레이스 안쪽 세트)를 선언합니다.이것은 실제로 포함된 클래스의 내부 클래스입니다. 그래서 암묵적으로this가비지 되는 경우가 않습니다.직렬화하거나 외부 클래스가 가비지 수집될 것으로 예상되지 않는 한 문제가 되지 않습니다.
Java 7은 사용자가 원하는 것을 정확하게 수행하기 위한 추가 언어 구성을 제공할 것으로 알고 있습니다.
편집: 최신 Java 버전은 이러한 컬렉션을 작성하기 위해 보다 유용한 기능을 제공합니다.이러한 버전보다 이전 버전에 대해 검토할 가치가 있습니다.
다음은 가장 가까운 정보입니다.
ArrayList<String> list = new ArrayList(Arrays.asList("Ryan", "Julie", "Bob"));
다음 기능으로 더욱 심플하게 할 수 있습니다.
List<String> list = Arrays.asList("Ryan", "Julie", "Bob")
Arrays.asList의 소스를 보면 ArrayList가 구축되지만 기본적으로는 List로 캐스트됩니다.따라서 다음 작업을 수행할 수 있습니다(단, 새로운 JDK의 경우 신뢰성이 떨어집니다).
ArrayList<String> list = (ArrayList<String>)Arrays.asList("Ryan", "Julie", "Bob")
Arrays.asList("Ryan", "Julie", "Bob");
Java에서는 목록에 대한 리터럴 구문이 없으므로 .add()를 수행해야 합니다.
요소가 많으면 좀 상세하지만 다음 중 하나를 선택할 수 있습니다.
- 그루비 같은 것을 사용하다
- Arrays.asList(어레이) 사용
2는 다음과 같습니다.
String[] elements = new String[] {"Ryan", "Julie", "Bob"};
List list = new ArrayList(Arrays.asList(elements));
이로 인해 불필요한 오브젝트가 생성됩니다.
은 '그러다'입니다ArrayList<Integer>(Arrays.asList(1,2,3,5,8,13,21));
단, 선택한 답변은 최종 어레이를 작성하기 전에 요소를 내부적으로 여러 번 복사하는 것이 중요합니다.또, 그 용장성의 일부를 삭감할 수 있는 방법이 있습니다.
먼저 무슨 일이 일어나고 있는지 이해하겠습니다.
이 .
Arrays.ArrayList<T>팩토리에Arrays.asList(T...).은 produce음음음음음음음음음음음 as as as as as as as as as as 와 같은 .
java.lang.ArrayList★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★에서는 '하다'와 같은 .remove(int)List 인터페이스가 있어도 상관없습니다.이 메서드를 호출하면, 이 메서드는,UnspportedMethodException다만, 고정 사이즈 리스트가 필요한 경우는, 여기서 정지할 수 있습니다.그 다음에
Arrays.ArrayList<T>#1에서 생성된 것이 생성자에게 전달됩니다.ArrayList<>(Collection<T>)어디서collection.toArray()method를 호출하여 복제합니다.public ArrayList(Collection<? extends E> collection) { ...... Object[] a = collection.toArray(); }다음으로 컨스트럭터는 클론된 어레이를 채택할지 또는 서브클래스 타입을 삭제하기 위해 다시 복사할지를 결정합니다.부터
Arrays.asList(T...)에서는 내부적으로 타입 T의 배열을 사용합니다.이는 파라미터와 동일하게 T가 순수 오브젝트가 아닌 한 컨스트럭터는 항상 클론 사용을 거부합니다.(예를 들어 문자열, 정수 등은 오브젝트를 확장하기 때문에 모두 다시 복사됩니다).if (a.getClass() != Object[].class) { //Arrays.asList(T...) is always true here //when T subclasses object Object[] newArray = new Object[a.length]; System.arraycopy(a, 0, newArray, 0, a.length); a = newArray; } array = a; size = a.length;
따라서 데이터는 ArrayList를 명시적으로 초기화하기 위해 3x로 복사되었습니다.2배까지 줄일 수 있어요Arrays.AsList(T...)오브젝트 []어레이를 구축하여 ArrayList가 나중에 채택할 수 있도록 합니다.이 작업은 다음과 같습니다.
(List<Integer>)(List<?>) new ArrayList<>(Arrays.asList((Object) 1, 2 ,3, 4, 5));
또는 생성 후 요소를 추가하는 것이 여전히 가장 효율적일 수 있습니다.
이건 어때?
ArrayList<String> names = new ArrayList<String>();
Collections.addAll(names, "Ryan", "Julie", "Bob");
op4j Java 라이브러리의 fluent 인터페이스를 사용하는 방법은 다음과 같습니다. (1.1은 2010년 12월에 출시되었습니다.) :-
List<String> names = Op.onListFor("Ryan", "Julie", "Bob").get();
아주 멋진 도서관으로 많은 시간을 절약할 수 있습니다.
언급URL : https://stackoverflow.com/questions/2760995/arraylist-initialization-equivalent-to-array-initialization
'source' 카테고리의 다른 글
| 전체 새로 고침 후 항목이 표시되지 않는 Vuetify v-select (0) | 2022.09.01 |
|---|---|
| 외부 테마 파일에 의해 생성되는 Dart SAS 경고 비활성화 (0) | 2022.09.01 |
| 설계 패턴:팩토리 vs 팩토리 방법 vs 추상 팩토리 (0) | 2022.09.01 |
| Vue 플러그인을 NPM에 게시하는 방법 (0) | 2022.09.01 |
| 이 =! 교환원은 무엇입니까? (0) | 2022.08.31 |