wake-up-neo.net

Erstellen Sie ein Array von Arraylisten

Ich möchte ein Array von Arraylisten wie folgt erstellen:

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

Aber es wird nicht kompiliert. Wie kann ich das machen?

146
user

Gemäß Oracle-Dokumentation :

"Sie können keine Arrays mit parametrisierten Typen erstellen"

Stattdessen könnten Sie Folgendes tun:

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

Wie von Tom Hawting - Tackline vorgeschlagen, ist es noch besser zu tun:

List<List<Individual>> group = new ArrayList<List<Individual>>(4);
126
MByD

Wie die anderen bereits erwähnt haben, ist es wahrscheinlich besser, eine andere Liste zum Speichern der ArrayList zu verwenden, wenn Sie jedoch ein Array verwenden müssen:

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

Das funktioniert:

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

Sie können eine Klasse erstellen, die ArrayList erweitert

class IndividualList extends ArrayList<Individual> {

}

und erstellen Sie dann das Array

IndividualList[] group = new IndividualList[10];
23
user2558221

Ich verstehe es überhaupt nicht, warum jeder den Genrentyp für das Array speziell für diese Frage vorschlägt.

Was ist, wenn ich n verschiedene Arraylisten indizieren möchte?.

Bei der Deklaration von List<List<Integer>> muss ich nArrayList<Integer>-Objekte manuell erstellen oder eine for-Schleife zum Erstellen von n-Listen oder auf andere Weise erstellen. In jedem Fall ist es meine Pflicht, n-Listen zu erstellen.

Ist es nicht toll, wenn wir es durch Casting als List<Integer>[] = (List<Integer>[]) new List<?>[somenumber] deklarieren? Ich halte es für ein gutes Design, bei dem man nicht alle Indexierungsobjekte (Arraylisten) selbst erstellen muss

Kann mir jemand erklären, warum dies (Arrayform) ein schlechtes Design ist und welche Nachteile es hat?

15
smslce

Sie können ein Array von ArrayList erstellen

List<Integer>[] outer = new List[number];
for (int i = 0; i < number; i++) {
    outer[i] = new ArrayList<>();
}

Dies ist in solchen Szenarien hilfreich. Sie kennen die Größe des äußeren. Aber die Größe der inneren variiert. Hier können Sie ein Array mit fester Länge erstellen, das Array-Listen mit variablen Größen enthält. Ich hoffe, das wird für Sie hilfreich sein.

In Java 8 und darüber können Sie es viel besser machen.

List<Integer>[] outer = new List[number];
Arrays.setAll(outer, element -> new ArrayList<>());

Noch besser mit Referenzmethode

List<Integer>[] outer = new List[10];
Arrays.setAll(outer,  ArrayList :: new);
10

Das Problem in dieser Situation ist, dass bei Verwendung einer Arrayliste eine Zeitkomplexität von o(n) für das Hinzufügen an einer bestimmten Position entsteht. Wenn Sie ein Array verwenden, erstellen Sie einen Speicherort, indem Sie Ihr Array deklarieren. Daher ist es konstant

6
Mark Odey

Dies funktioniert, Array von ArrayList. Versuchen Sie es zu verstehen, wie es funktioniert.

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]);
    }
}

Dank an Kelvincer für einige Codes.

5
Rich

Sie können kein generisches Array erstellen. Liste der ArrayListen erstellen:

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

oder wenn Sie wirklich Array benötigen (ACHTUNG: schlechtes Design!):

 ArrayList[] group = new ArrayList[4];
3
Piotr Gwiazda
  1. Erstellung und Initialisierung

    Object[] yourArray = new Object[ARRAY_LENGTH];
    
  2. Schreibzugriff

    yourArray[i]= someArrayList;
    

    zugriff auf Elemente der internen ArrayList:

    ((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
    
  3. Lesezugriff

    um das Array-Element i als ArrayList zu lesen, verwenden Sie den Typ Casting:

    someElement= (ArrayList<YourType>) yourArray[i];
    

    für Array-Element i: zum Lesen des ArrayList-Elements am Index j

    arrayListElement= ((ArrayList<YourType>) yourArray[i]).get(j);
    
2
Amr Lotfy

List [] listArr = neue ArrayList [4];

Die obere Zeile gibt eine Warnung aus, aber es funktioniert (d. H. Es erstellt Array von ArrayList).

1
ashu17188

So deklarieren Sie ein Array von ArrayLists statisch für Sprite-Positionen als Punkte:

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>();
}

dynamisch:

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>();
    }
}

Trotz der Vorsichtshinweise und einiger komplexer Vorschläge habe ich festgestellt, dass ein Array von ArrayLists eine elegante Lösung ist, um verwandte ArrayLists des gleichen Typs darzustellen.

1
Androidcoder

Sie können wie folgt erstellen ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];

Sie müssen ein Array eines nicht generischen Typs erstellen und es dann in ein generisches umwandeln.

1
Tejendra

ArrayList<Integer>[] graph = new ArrayList[numCourses]Es funktioniert.

0
xiankun zhu
ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
   al[i] = new ArrayList<String>();
}
0
HeadAndTail
ArrayList<String>[] lists = (ArrayList<String>[])new ArrayList[10]; 
0
Labeo

Ich finde das einfacher zu benutzen ...

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

Du kannst das :

// Erstellen Sie ein Array vom Typ ArrayList

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

// Für jedes Element im Array eine ArrayList erstellen

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