[java] 배열 목록의 배열 만들기

아래와 같이 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);


답변

다른 사람들이 언급했듯이 다른 목록을 사용하여 ArrayList를 저장하는 것이 더 좋지만 배열을 사용해야하는 경우 :

ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];


답변

이것은 작동합니다 :

ArrayList<String>[] group = new ArrayList[4];


답변

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의 배열로 작동합니다. 그것이 어떻게 작동하는지 이해하려고 노력하십시오.

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에게 제공합니다.