아래와 같이 arraylist 배열을 만들고 싶습니다.
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
그러나 컴파일되지 않습니다. 어떻게해야합니까?
아래와 같이 arraylist 배열을 만들고 싶습니다.
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
그러나 컴파일되지 않습니다. 어떻게해야합니까?
답변:
당으로 오라클 문서 :
"매개 변수화 된 유형의 배열을 작성할 수 없습니다"
대신, 당신은 할 수 있습니다 :
ArrayList<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>(4);
Tom Hawting이 제안한 것처럼 tackline은 다음과 같이하는 것이 좋습니다.
List<List<Individual>> group = new ArrayList<List<Individual>>(4);
List<List<Individual>> group = new ArrayList<List<Individual>>();
아마 더 나을 것입니다.
다른 사람들이 언급했듯이 다른 목록을 사용하여 ArrayList를 저장하는 것이 더 좋지만 배열을 사용해야하는 경우 :
ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
ArrayList<String>[] group = new ArrayList[4]
) 보다 선호되는 이유는 무엇입니까? 캐스트는 무엇을 더 잘합니까?
new ArrayList<?>[N]
원시 유형을 사용하지 않도록 사용해야 합니다.
이것은 작동합니다 :
ArrayList<String>[] group = new ArrayList[4];
ArrayList<String>
대신 대신 ArrayList<NotString>
)하여 group
컴파일하지 않는 바람직한 이점을 가지고 있습니다.
Note: hello.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
ArrayList를 확장하는 클래스를 만들 수 있습니다
class IndividualList extends ArrayList<Individual> {
}
그런 다음 배열을 만듭니다
IndividualList[] group = new IndividualList[10];
나는 그것을 완전히 이해하지 못한다. 왜 모든 사람들 이이 질문에 대해 배열에 대해 일반적 유형을 제안하고 있는지.
n
다른 배열 목록 을 색인화해야하는 경우 어떻게해야합니까?
선언하면 객체를 수동으로 List<List<Integer>>
만들 n
ArrayList<Integer>
거나 for 루프를 사용하여 n
목록이나 다른 방법 을 만들 필요가 있습니다 . 어쨌든 항상 n
목록 을 만드는 것이 내 의무 입니다.
캐스팅을 통해로 선언하면 좋지 않습니다 List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]
. 나는 모든 색인 객체 (배열 목록)를 스스로 만들 필요가없는 좋은 디자인으로 본다.
왜 이것이 (어레이 폼) 나쁜 디자인이고 그 단점이 무엇인지 깨달을 수 있습니까?
ArrayList의 배열을 만들 수 있습니다
List<Integer>[] outer = new List[number];
for (int i = 0; i < number; i++) {
outer[i] = new ArrayList<>();
}
이것은 이와 같은 시나리오에서 도움이 될 것입니다. 당신은 외부의 크기를 알고 있습니다. 그러나 내면의 크기는 다양합니다. 여기에서 크기가 다양한 배열 목록을 포함하는 고정 길이의 배열을 만들 수 있습니다. 이것이 당신에게 도움이되기를 바랍니다.
에서 자바 8 이상 당신은 더 나은 방법으로 할 수 있습니다.
List<Integer>[] outer = new List[number];
Arrays.setAll(outer, element -> new ArrayList<>());
메소드 참조를 사용 하는 것이 더 좋습니다.
List<Integer>[] outer = new List[10];
Arrays.setAll(outer, ArrayList :: new);
ArrayList::new
호출합니다 ArrayList(int)
. 따라서 크기가 작거나 너무 큰 배열로 끝납니다. 사용법에 따라. 나는 그것을 사용하지 말고 대신 람다 식에서 생성자를 직접 호출하는 두 번째 방법을 선호합니다.
이것은 ArrayList의 배열로 작동합니다. 그것이 어떻게 작동하는지 이해하려고 노력하십시오.
import java.util.*;
public class ArrayOfArrayList {
public static void main(String[] args) {
// Put the length of the array you need
ArrayList<String>[] group = new ArrayList[15];
for (int x = 0; x < group.length; x++) {
group[x] = new ArrayList<>();
}
//Add some thing to first array
group[0].add("Some");
group[0].add("Code");
//Add some thing to Secondarray
group[1].add("In here");
//Try to output 'em
System.out.println(group[0]);
System.out.println(group[1]);
}
}
일부 코드는 Kelvincer에게 제공합니다.
제네릭 형식의 배열을 만들 수 없습니다. ArrayList 목록 만들기 :
List<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>();
또는 배열이 정말로 필요한 경우 (경고 : 잘못된 디자인!) :
ArrayList[] group = new ArrayList[4];
작성 및 초기화
Object[] yourArray = new Object[ARRAY_LENGTH];
쓰기 권한
yourArray[i]= someArrayList;
내부 ArrayList의 요소에 액세스하려면 :
((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
읽기 권한
배열 요소 i를 ArrayList로 읽으려면 유형 캐스팅을 사용하십시오.
someElement= (ArrayList<YourType>) yourArray[i];
배열 요소 i의 경우 : 인덱스 j에서 ArrayList 요소 읽기
arrayListElement= ((ArrayList<YourType>) yourArray[i]).get(j);
Sprite 위치를 Points로 정적으로 ArrayLists의 배열을 선언하려면 :
ArrayList<Point>[] positionList = new ArrayList[2];
public Main(---) {
positionList[0] = new ArrayList<Point>(); // Important, or you will get a NullPointerException at runtime
positionList[1] = new ArrayList<Point>();
}
동적으로 :
ArrayList<Point>[] positionList;
int numberOfLists;
public Main(---) {
numberOfLists = 2;
positionList = new ArrayList[numberOfLists];
for(int i = 0; i < numberOfLists; i++) {
positionList[i] = new ArrayList<Point>();
}
}
주의 사항과 복잡한 제안에도 불구하고 ArrayLists 배열은 동일한 유형의 관련 ArrayLists를 나타내는 우아한 솔루션이라는 것을 알았습니다.
사용하기가 더 쉽다는 것을 알았습니다 ...
static ArrayList<Individual> group[];
......
void initializeGroup(int size)
{
group=new ArrayList[size];
for(int i=0;i<size;i++)
{
group[i]=new ArrayList<Individual>();
}
당신은 이것을 할 수 있습니다 :
// ArrayList 유형의 배열 만들기
`ArrayList<Integer>[] a = new ArrayList[n];`
// 배열의 각 요소에 대해 ArrayList를 만듭니다.
for(int i=0; i<n; i++){
a[i] = new ArrayList<Integer>();
}
ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
al[i] = new ArrayList<String>();
}
List []를 만들고 for 루프로 초기화 할 수 있습니다. 오류없이 컴파일됩니다.
List<e>[] l;
for(int i = 0; i < l.length; i++){
l[i] = new ArrayList<e>();
}
arrayList [] l에서도 작동합니다.
l.length
for-loop에는 정의되어 있지 않습니다. 런타임 오류 일 수 있습니다.