Java에서 목록을 배열로 변환
이 질문에는 이미 답변이 있습니다.
Java에서 List
를 로 변환하려면 어떻게 Array
해야합니까?
아래 코드를 확인하십시오.
ArrayList<Tienda> tiendas;
List<Tienda> tiendasList;
tiendas = new ArrayList<Tienda>();
Resources res = this.getBaseContext().getResources();
XMLParser saxparser = new XMLParser(marca,res);
tiendasList = saxparser.parse(marca,res);
tiendas = tiendasList.toArray();
this.adaptador = new adaptadorMarca(this, R.layout.filamarca, tiendas);
setListAdapter(this.adaptador);
배열 tiendas
에 값 을 채워야합니다 tiendasList
.
어느 한 쪽:
Foo[] array = list.toArray(new Foo[0]);
또는:
Foo[] array = new Foo[list.size()];
list.toArray(array); // fill the array
이것은 참조 유형의 배열에만 작동합니다. 기본 유형의 배열의 경우 전통적인 방법을 사용하십시오.
List<Integer> list = ...;
int[] array = new int[list.size()];
for(int i = 0; i < list.size(); i++) array[i] = list.get(i);
최신 정보:
이제는 사용 list.toArray(new Foo[0]);
하지 않는 것이 좋습니다 list.toArray(new Foo[list.size()]);
.
JetBrains Intellij Idea 검사에서 :
컬렉션을 배열로 변환하는 두 가지 스타일이 있습니다 : 미리 크기가 지정된 배열 ( c.toArray (new String [c.size ()]) )을 사용하거나 빈 배열 ( c.toArray (new String [ 0]) .
이전 크기의 Java 버전에서는 적절한 크기의 배열을 만드는 데 필요한 리플렉션 호출이 상당히 느리기 때문에 사전 크기 배열을 사용하는 것이 좋습니다. 그러나 OpenJDK 6의 최신 업데이트 이후로이 호출은 내재화되어 비어있는 어레이 버전의 성능을 사전 크기의 버전과 동일하고 때로는 더 좋게 만들었습니다. 또한 크기 와 toArray 호출 간에 데이터 경쟁이 가능 하므로 작업 중 수집이 동시에 축소 된 경우 배열 끝에 널이 추가로 발생할 수 있으므로 사전 크기 조정 배열을 전달하는 것은 동시 또는 동기화 된 콜렉션에 위험 합니다.
이 검사를 통해 빈 어레이 (현대 Java에서 권장 됨)를 사용하거나 미리 크기가 지정된 어레이 (이전 Java 버전 또는 HotSpot 기반이 아닌 JVM에서는 더 빠름)를 사용하는 균일 한 스타일을 따를 수 있습니다.
Java 8의 대안 :
String[] strings = list.stream().toArray(String[]::new);
이것이 가장 간단한 방법이라고 생각합니다.
Foo[] array = list.toArray(new Foo[0]);
이 코드 스 니펫을 발견하여 해결했습니다.
//Creating a sample ArrayList
List<Long> list = new ArrayList<Long>();
//Adding some long type values
list.add(100l);
list.add(200l);
list.add(300l);
//Converting the ArrayList to a Long
Long[] array = (Long[]) list.toArray(new Long[list.size()]);
//Printing the results
System.out.println(array[0] + " " + array[1] + " " + array[2]);
변환은 다음과 같이 작동합니다.
- 원래 목록의 크기로 새로운 Long 배열을 만듭니다.
- 새로 만든 것을 사용하여 원래 ArrayList를 배열로 변환합니다.
- 해당 배열을 Long 배열 (Long [])로 캐스팅합니다.
ArrayList의 경우 다음이 작동합니다.
ArrayList<Foo> list = new ArrayList<Foo>();
//... add values
Foo[] resultArray = new Foo[list.size()];
resultArray = list.toArray(resultArray);
이것은 작동합니다. 거의.
public static Object[] toArray(List<?> a) {
Object[] arr = new Object[a.size()];
for (int i = 0; i < a.size(); i++)
arr[i] = a.get(i);
return arr;
}
그런 다음 주요 방법입니다.
public static void main(String[] args) {
List<String> list = new ArrayList<String>() {{
add("hello");
add("world");
}};
Object[] arr = toArray(list);
System.out.println(arr[0]);
}
Java 8없이 가장 좋은 것은 다음과 같습니다.
public static <T> T[] toArray(List<T> list, Class<T> objectClass) {
if (list == null) {
return null;
}
T[] listAsArray = (T[]) Array.newInstance(objectClass, list.size());
list.toArray(listAsArray);
return listAsArray;
}
누구 든지이 작업을 수행하는 더 좋은 방법이 있다면 공유하십시오 :)
이것은 (Ondrej의 답변)입니다.
Foo[] array = list.toArray(new Foo[0]);
내가 보는 가장 일반적인 관용구입니다. "0"대신 실제 목록 크기를 사용하라고 제안하는 사람들은 여기서 무슨 일이 일어나고 있는지 오해하고 있습니다. toArray 호출은 주어진 배열의 크기 또는 내용에 신경 쓰지 않으며 유형 만 필요합니다. "Foo.class"가 훨씬 더 분명한 실제 유형을 취하면 더 좋을 것입니다. 예,이 관용구는 더미 객체를 생성하지만 목록 크기를 포함하면 더 큰 더미 객체를 생성한다는 의미입니다. 다시, 객체는 어떤 식 으로든 사용되지 않습니다. 필요한 유형 만 있습니다.
이 페이지에서 가져온 예 : http://www.java-examples.com/copy-all-elements-java-arraylist-object-array-example
import java.util.ArrayList;
public class CopyElementsOfArrayListToArrayExample {
public static void main(String[] args) {
//create an ArrayList object
ArrayList arrayList = new ArrayList();
//Add elements to ArrayList
arrayList.add("1");
arrayList.add("2");
arrayList.add("3");
arrayList.add("4");
arrayList.add("5");
/*
To copy all elements of java ArrayList object into array use
Object[] toArray() method.
*/
Object[] objArray = arrayList.toArray();
//display contents of Object array
System.out.println("ArrayList elements are copied into an Array.
Now Array Contains..");
for(int index=0; index < objArray.length ; index++)
System.out.println(objArray[index]);
}
}
/*
Output would be
ArrayList elements are copied into an Array. Now Array Contains..
1
2
3
4
5
다음과 같이 toArray () API를 사용할 수 있습니다.
ArrayList<String> stringList = new ArrayList<String>();
stringList.add("ListItem1");
stringList.add("ListItem2");
String[] stringArray = new String[stringList.size()];
stringArray = stringList.toArray(stringList);
배열의 값은
for(String value : stringList)
{
System.out.println(value);
}
이 시도:
List list = new ArrayList();
list.add("Apple");
list.add("Banana");
Object[] ol = list.toArray();
참고 URL : https://stackoverflow.com/questions/9572795/convert-list-to-array-in-java
'Programing' 카테고리의 다른 글
주어진 Linux가 32 비트인지 64 비트인지 확인하는 방법은 무엇입니까? (0) | 2020.02.15 |
---|---|
C #에서 #region에 해당하는 Java (0) | 2020.02.15 |
두 개의 중첩 된 목록의 교차점을 찾으십니까? (0) | 2020.02.15 |
OS X : Linux의 wget에 해당 (0) | 2020.02.15 |
가변 구조체는 왜 "악"입니까? (0) | 2020.02.15 |