Programming

Arraylist에서 Array로

procodes 2020. 8. 8. 14:16
반응형

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


ArrayList<String> a = new ArrayList<String>();
a.add( "test" );
@SuppressWarnings( "unused")
Object[] array = a.toArray();

나중에 배열을 조작해야하는 경우 달성하려는 목표에 따라 ArrayList에 문자열을 유지하는 것보다 더 많은 노력이 소요됩니다. 또한 ArrayList에 대한 임의 액세스 권한이 있습니다.list.get( index );


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);  
           }  
      }  

for reference, refer this link http://techno-terminal.blogspot.in/2015/11/how-to-obtain-array-from-arraylist.html


One approach would be to add the Second for Loop where the printing is being done inside the first for loop. Like this:

static String[] SENTENCE; 

public static void main(String []args) throws Exception{

   Scanner sentence = new Scanner(new File("assets/blah.txt"));
   ArrayList<String> sentenceList = new ArrayList<String>();

   while (sentence.hasNextLine())
   {
       sentenceList.add(sentence.nextLine());
   }

   sentence.close();

   String[] sentenceArray = sentenceList.toArray(new String[sentenceList.size()]);
  // System.out.println(sentenceArray.length);
   for (int r=0;r<sentenceArray.length;r++)
   {
       SENTENCE = sentenceArray[r].split("(?<=[.!?])\\s*"); //split sentences and store in array 

       for (int i=0;i<SENTENCE.length;i++)
       {
           System.out.println("Sentence " + (i+1) + ": " + SENTENCE[i]);
       }
   }    

}

참고URL : https://stackoverflow.com/questions/7969023/from-arraylist-to-array

반응형