2017-05-25 6 views
1

Ich habe eine Klasse namens Grid erstellt und ich struggeling, um die Kapazität eines verschachtelten ArrayList zu definieren. Dies ist, was ich derzeit haben:Definieren der Kapazität einer mehrdimensionalen Arraylist

public class Grid extends GameObject { 

    private int cols; 
    private int rows; 
    private int colWidth; 
    private int rowHeight; 
    private ArrayList<ArrayList<GameObject>> contents; 

    public Grid(int x, int y, int cols, int rows, int colWidth, int rowHeight, ID id) { 
     super(); 
     this.x = x; 
     this.y = y; 
     this.cols = cols; 
     this.rows = rows; 
     this.colWidth = colWidth; 
     this.rowHeight = rowHeight; 

     //Here I want to define the contents 

     this.width = colWidth * cols; 
     this.height = rowHeight * rows; 
     this.id = id; 
    } 
} 

Der Code sollte wie folgt aussehen:

this.contents = new ArrayList<ArrayList<GameObject>(cols)>(rows); 

Aber dies gibt einen Fehler. Kann jemand dieses Problem lösen, ich würde es wirklich schätzen! Danke im Voraus!

Antwort

0

Sie können es nicht mit einer einzigen Initialisierungsanweisung tun. Du brauchst eine Schleife.

+0

Ich hoffte irgendwie, dass es möglich war, aber das wird reichen müssen. Danke! – Trashtalk

0

Definieren Sie die Größe beim Erstellen der Liste.

contents = new ArrayList<>(x); 

contents.add(new ArraysList<GameObject>(y)); 
0

Sie können einfach nicht, wie aus der Sicht der Anwendung, es ist einzelne Dimension Liste. Auch new ArrayList<?>(N) definiert nicht die maximale Kapazität der Liste (wie new GameObject[N] würde), aber es definiert seine anfängliche Kapazität. Nachdem Sie dieser Liste N Elemente hinzugefügt haben, können Sie noch weitere hinzufügen, da intern ein anderes Array zugewiesen wird, diesmal größer als N, und der Inhalt wird kopiert.

Sie müssen jede Dimension durchsehen und eine neue Liste mit optionalen Anfangskapazitäten erstellen.

Verwandte Themen