IT박스

배열 목록의 배열 만들기

itboxs 2020. 6. 6. 08:57
반응형

배열 목록의 배열 만들기


아래와 같이 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에게 제공합니다.


이 상황의 문제점은 arraylist를 사용하여 특정 위치에 추가하기 위해 시간 복잡도 o (n)을 얻는 것입니다. 배열을 사용하는 경우 배열을 선언하여 메모리 위치를 작성하므로 일정합니다.


제네릭 형식의 배열을 만들 수 없습니다. ArrayList 목록 만들기 :

 List<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>();

또는 배열이 정말로 필요한 경우 (경고 : 잘못된 디자인!) :

 ArrayList[] group = new ArrayList[4];

  1. 작성 및 초기화

    Object[] yourArray = new Object[ARRAY_LENGTH];
    
  2. 쓰기 권한

    yourArray[i]= someArrayList;
    

    내부 ArrayList의 요소에 액세스하려면 :

    ((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
    
  3. 읽기 권한

    배열 요소 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>();
    }
}

Despite the cautions and some complex suggestions here, I have found an array of ArrayLists to be an elegant solution to represent related ArrayLists of the same type.


You can create like this ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];

You have to create array of non generic type and then cast it into generic one.


List[] listArr = new ArrayList[4];

Above line gives warning , but it works (i.e it creates Array of ArrayList)


I find this easier to use...

static ArrayList<Individual> group[];
......
void initializeGroup(int size)
{
 group=new ArrayList[size];
 for(int i=0;i<size;i++)
 {
  group[i]=new ArrayList<Individual>();
 }

You can do this :

//Create an Array of type ArrayList

`ArrayList<Integer>[] a = new ArrayList[n];`

//For each element in array make an ArrayList

for(int i=0; i<n; i++){ 
    a[i] = new ArrayList<Integer>();
}

ArrayList<String>[] lists = (ArrayList<String>[])new ArrayList[10]; 

ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
   al[i] = new ArrayList<String>();
}

ArrayList<Integer>[] graph = new ArrayList[numCourses] It works.


you can create a List[] and initialize them by for loop. it compiles without errors:

List<e>[] l;
for(int i = 0; i < l.length; i++){
    l[i] = new ArrayList<e>();
}

it works with arrayList[] l as well.

참고URL : https://stackoverflow.com/questions/8559092/create-an-array-of-arraylists

반응형