어레이 리스트에서 어레이로
Array List에서 Array로 변환하는 것이 안전한지 여부를 알고 싶습니다.각 행에 문자열이 있는 텍스트 파일이 있습니다.
1236
1233
4566
4568
....
그것들을 어레이 리스트로 읽어, 어레이로 변환합니다.그렇게 하는 것이 바람직한가/합법적인가?
감사해요.
네, 를 로 변환하는 것은 안전합니다.그것이 좋은 생각인지 아닌지는 당신이 의도한 용도에 달려 있다.가 제공하는 작업이 필요합니까?만약 그렇다면, 그것을 보관해 주세요.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]);
그러나 효과는 낮습니다.문자열 배열은 2회 작성됩니다.첫 번째 제로렝스 배열이 생성되면 실제 크기의 배열이 생성되어 채워지고 반환됩니다.필요한 사이즈를 알고 있기 때문에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의 최신 업데이트 이후 이 콜이 내장되어 빈 어레이 버전의 퍼포먼스가 이전 크기 버전과 동일하고 경우에 따라서는 더 향상되었습니다.또, 사이즈가 미리 설정된 어레이를 건네주는 것은, 동시 또는 동기한 수집에서는 위험합니다.이는 사이즈가 있는 콜과 어레이 콜 사이에 데이터 레이스가 발생할 수 있기 때문에, 조작중에 수집이 동시에 축소되었을 경우 어레이의 마지막에 여분의 늘이 발생할 가능성이 있기 때문입니다.빈 어레이를 사용하거나(현대 Java에서 권장됨) 사전 크기 어레이를 사용하거나(이전 Java 버전이나 HotSpot 기반 이외의 JVM에서 더 빠를 수 있음) 동일한 스타일을 따를 수 있습니다.
이는 새로운 Java(> Java 6)에서 권장되는 사용법입니다.
String[] myArray = myArrayList.toArray(new String[0]);
이전 Java 버전에서는 적절한 크기의 배열을 작성하기 위해 필요한 반사 호출이 매우 느렸기 때문에 사전 크기의 배열을 사용하는 것이 권장되었습니다.그러나 OpenJDK 6의 최신 업데이트 이후 이 콜이 내장되어 빈 어레이 버전의 퍼포먼스가 이전 크기 버전과 동일하고 경우에 따라서는 더 향상되었습니다.또, 사이즈가 미리 설정된 어레이를 건네주는 것은, 동시 또는 동기한 수집에서는 위험합니다.이는 사이즈가 있는 콜과 어레이 콜 사이에 데이터 레이스가 발생할 수 있기 때문에, 조작중에 수집이 동시에 축소되었을 경우 어레이의 마지막에 여분의 늘이 발생할 가능성이 있기 때문입니다.이 검사에서는 빈 어레이(현대 Java에서 권장됨)를 사용하거나 사전 크기 어레이(이전 Java 버전 또는 비 HotSpot 기반 JVM에서 더 빠를 수 있음)를 사용하는 등 통일된 스타일을 따를 수 있습니다.
대부분의 답변은 수락된 대로 작동합니다.그러나 Java 11 이후 메서드 참조 연산자 또는 이중 콜론 연산자(:)를 사용하여 toArray() 메서드를 사용하는 다른 방법이 있습니다.
다음은 예를 제시하겠습니다.
ArrayList<String> list = new ArrayList<>();
// ... add strings to list
// Since java 11
String[] strArray = list.toArray(String[]::new);
// before java 11, as specified in the official documentation.
strArray = list.toArray(new String[0]);
Collection 인터페이스에는 새로운 컬렉션을 배열로 변환하기 위한 toArray() 메서드가 포함되어 있습니다.이 방법에는 두 가지 형태가 있습니다.no 인수 버전은 객체 배열 내의 컬렉션 요소를 public Object [ ]에서 Array()로 반환합니다.반환된 배열은 다른 데이터 형식으로 캐스트할 수 없습니다.이것이 가장 간단한 버전입니다.두 번째 버전에서는 반환할 배열의 데이터 유형인 public Object [ ] to Array(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);
}
}
자세한 것은, 다음의 링크를 참조해 주세요.
첫 번째 포루프 내에서 인쇄가 이루어지는 두 번째 포루프를 추가하는 방법이 있습니다.다음과 같이 합니다.
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]);
}
}
}
ArrayList<String> a = new ArrayList<String>();
a.add( "test" );
@SuppressWarnings( "unused")
Object[] array = a.toArray();
나중에 어레이를 조작해야 하는 경우 ArrayList에 문자열을 유지하는 것보다 더 많은 노력이 소요됩니다. ArrayList를 할 수 .list.get( index );
저는 보통 이 방법을 사용합니다.
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
int[] arr = list.stream().mapToInt(i -> i).toArray();
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
}
언급URL : https://stackoverflow.com/questions/7969023/from-arraylist-to-array
'programing' 카테고리의 다른 글
Intelij Spring Initializer를 사용할 수 없습니다. (0) | 2023.01.30 |
---|---|
ES6에 심볼을 도입하는 동기는 무엇입니까? (0) | 2023.01.30 |
웹 사이트 스크린샷 (0) | 2023.01.20 |
spring-boot jpa 하이버네이션에서 4<24를 초과하면 DB로의 접속이 끊어진다. (0) | 2023.01.20 |
"new Object()"와 객체 리터럴 표기법의 차이점은 무엇입니까? (0) | 2023.01.20 |