2-dimensionales Array

minzee

Bekanntes Mitglied
Hi 🙂

Ich würde gerne ein 2-dimensionales Array anlegen, wobei ich in jeder Zeile aber unterschiedlich viele Elemente habe.

Ich vermute, das geht nicht. Ist das richtig?

Darum habe ich das mit ArrayList probiert, aber das klappt leider auch nicht.
Java:
import java.util.ArrayList;
class Main
{
   public static void main(String[] args)
   {
      ArrayList<Integer> a0 = new ArrayList<Integer>();
      a0.add(1);
      a0.add(2);
      a0.add(3);
      ArrayList<Integer> a1 = new ArrayList<Integer>();
      a1.add(4);
      ArrayList<ArrayList> a = new ArrayList<ArrayList>();
      a.add(a0);
      a.add(a1);
      System.out.println(a.get(1).get(0));
      a.get(0).set(1, 200);
      System.out.println(a.get(0).get(0));
      System.out.println(a.get(0).get(1));
      System.out.println(a.get(0).get(2));
   }
}
Ich habe dann nämlich ein Problem, wenn ich einen Wert ändern will.
Java:
javac -Xlint Main.java
Main.java:12: warning: [rawtypes] found raw type: ArrayList
      ArrayList<ArrayList> a = new ArrayList<ArrayList>();
                ^
  missing type arguments for generic class ArrayList<E>
  where E is a type-variable:
    E extends Object declared in class ArrayList
Main.java:12: warning: [rawtypes] found raw type: ArrayList
      ArrayList<ArrayList> a = new ArrayList<ArrayList>();
                                             ^
  missing type arguments for generic class ArrayList<E>
  where E is a type-variable:
    E extends Object declared in class ArrayList
Main.java:16: warning: [unchecked] unchecked call to set(int,E) as a member of the raw type ArrayList
      a.get(0).set(1, 200);
                  ^
  where E is a type-variable:
    E extends Object declared in class ArrayList
3 warnings
Wie kann ich denn so ein 2-dimensionales Array mit unterschiedlicher Anzahl an Elementen je Zeile definieren, wo ich dann nicht nur auslesen, sondern auch die Werte ändern kann?

Und warum schreibt hier die Fehlermeldung etwas von raw types und generics? Die habe ich doch alle korrekt und vollständig definiert, oder?
 
Zuletzt bearbeitet:
Doch, das geht problemslos mit normalen Arrays

Java:
public static void main(String[] args) {
   	
    int[][] arr = new int[3][];
        arr[0] = new int[10];
        arr[1] = new int[5];
        arr[2] = new int[7];

        arr[1][4] = 1;
        arr[2][5] = 2;
        arr[0][6] = 3;
        for (int[] i : arr) {
            for (int j : i) {
                System.out.print(j + " ");
            }
            System.out.println();
        }
  }

Ausgabe:
Code:
0 0 0 0 0 0 3 0 0 0 
0 0 0 0 1 
0 0 0 0 0 2 0

Wie auch immer, mit Listen ginge es natürlich auch. Was du offenbar haben möchtest ist eine Liste von Listen, welche Integer-Werte aufnehmen. Statt
Java:
ArrayList<ArrayList> a = new ArrayList<ArrayList>();
sollte es dann heißen
Java:
ArrayList<ArrayList<Integer>> a = new ArrayList<>();
Dann funktioniert dein Code auch..

Die Verwaltung von solchen Listen ist vergleichsweise zu der Verwaltung von Arrays aber sehr teuer. Wenn du auf die Vorzüge der Listen nicht angewiesen bist, dann nimm also besser die Arrays
 
Zuletzt bearbeitet:

Zurück
Oben