[java] Arraylist에서 Array로

ArrayList에서 Array로 변환하는 것이 안전 / 권장되는지 알고 싶습니다. 각 줄에 문자열이있는 텍스트 파일이 있습니다.

1236
1233
4566
4568
....

배열 목록으로 읽어 들인 다음 배열로 변환합니다. 그렇게하는 것이 합법적입니까?

감사



답변

, ArrayListArray . 좋은 아이디어인지 여부는 의도 된 용도에 따라 다릅니다. ArrayList제공 하는 작업이 필요 합니까? 그렇다면 ArrayList. 그렇지 않으면 멀리 개종하십시오!

ArrayList<Integer> foo = new ArrayList<Integer>();
foo.add(1);
foo.add(1);
foo.add(2);
foo.add(3);
foo.add(5);
Integer[] bar = foo.toArray(new Integer[foo.size()]);
System.out.println("bar.length = " + bar.length);

출력

bar.length = 5


답변

이것이 최선의 방법 (IMHO)입니다.

List<String> myArrayList = new ArrayList<String>();
//.....
String[] myArray = myArrayList.toArray(new String[myArrayList.size()]);

이 코드는 다음과 같이 작동합니다.

String[] myArray = myArrayList.toArray(new String[0]);

그러나 덜 효과적입니다. 문자열 배열이 두 번 생성됩니다. 처음에 길이가 0 인 배열이 생성 된 다음 실제 크기 배열이 생성되고 채워지고 반환됩니다. 따라서 필요한 크기 (부터 list.size()) 를 알고 있기 때문에 모든 요소를 ​​넣을 수있을만큼 큰 배열을 만들어야합니다. 이 경우 재 할당되지 않습니다.


답변

ArrayList<String> myArrayList = new ArrayList<String>();
...
String[] myArray = myArrayList.toArray(new String[0]);

“좋은 아이디어”인지 여부는 실제로 사용 사례에 따라 달라집니다.


답변

v가 ArrayList라고 가정합니다.

String[] x = (String[]) v.toArray(new String[0]);


답변

컬렉션을 배열로 변환하는 두 가지 스타일이 있습니다. 미리 크기가 c.toArray(new String[c.size()])지정된 배열 (예 🙂 또는 빈 배열 (예 :)을 사용합니다 c.toArray(new String[0]). 사전 크기 배열을 사용하는 이전 Java 버전에서는 적절한 크기의 배열을 만드는 데 필요한 리플렉션 호출이 매우 느리기 때문에 권장되었습니다. 그러나 빈 배열 (최신 Java에서 권장 됨)을 사용하거나 사전 크기 배열 (이전 Java 버전 또는 HotSpot 기반이 아닌 JVM에서 더 빠를 수 있음)을 사용하는 최신 업데이트 이후 . OpenJDK 6의 호출이 내재되어 빈 어레이 버전의 성능이 미리 크기 조정 된 버전과 비교하여 동일하고 때로는 더 나아졌습니다. 또한 사전 크기 배열을 전달하는 것은 크기와 toArray 호출 사이에 데이터 경합이 가능하기 때문에 동시 또는 동기화 된 수집에 위험합니다.이 경우 수집이 작업 중에 동시에 축소 된 경우 배열 끝에 추가 null이 발생할 수 있습니다. 유니폼 스타일을 따를 수 있습니다.


답변

최신 Java (> Java 6)에 권장되는 사용법입니다.

String[] myArray = myArrayList.toArray(new String[0]);

사전 크기 배열을 사용하는 이전 Java 버전에서는 적절한 크기의 배열을 만드는 데 필요한 리플렉션 호출이 매우 느리기 때문에 권장되었습니다. 그러나 OpenJDK 6의 최신 업데이트 이후이 호출이 내재되어 빈 어레이 버전의 성능이 미리 크기 조정 된 버전과 비교하여 동일하고 때로는 더 나아졌습니다. 또한 사전 크기 배열을 전달하는 것은 크기와 toArray 호출 사이에 데이터 경합이 가능하기 때문에 동시 또는 동기화 된 수집에 위험합니다.이 경우 수집이 작업 중에 동시에 축소 된 경우 배열 끝에 추가 null이 발생할 수 있습니다. 이 검사를 통해 빈 배열 (최신 Java에서 권장 됨)을 사용하거나 사전 크기 배열 (이전 Java 버전 또는 HotSpot 기반이 아닌 JVM에서 더 빠를 수 있음)을 사용하여 균일 한 스타일을 따를 수 있습니다.


답변

Collection 인터페이스에는 새 컬렉션을 배열로 변환하는 toArray () 메서드가 포함되어 있습니다. 이 방법에는 두 가지 형태가 있습니다. 인수가없는 버전은 컬렉션의 요소를 Object 배열로 반환합니다. public Object [] toArray (). 반환 된 배열은 다른 데이터 유형으로 캐스트 할 수 없습니다. 이것은 가장 간단한 버전입니다. 두 번째 버전에서는 반환하려는 배열의 데이터 유형을 전달해야합니다. public Object [] toArray (Object type []).

 public static void main(String[] args) {
           List<String> l=new ArrayList<String>();
           l.add("A");
           l.add("B");
           l.add("C");
           Object arr[]=l.toArray();
           for(Object a:arr)
           {
                String str=(String)a;
                System.out.println(str);
           }
      }  

참고로 http://techno-terminal.blogspot.in/2015/11/how-to-obtain-array-from-arraylist.html 링크를 참조하십시오.