2016-09-19 5 views
2

Ich habe immer festgestellt, dass dies problematisch ist, im Wesentlichen ein garantierter Nullzeiger in den meisten Fällen.Größe der 2-dimensionalen ArrayList in Java

Sagen wir eine zweidimensionale Arraylist haben, etwa so:

ArrayList<ArrayList<Integer>> outer; 

Nun möchte ich die Dimensionen der inneren Arrays bekommen (wir gehen davon aus, dass sie alle die gleiche Größe sein sollte).

Oft finde ich, dass ich dies tun:

int width = outer.size(); 
int length = outer.get(0).size(); 

aber das ist von Natur aus unsicher und einfach nur schrecklich. Was ist ein besserer Weg, dies zu tun?

Eine bessere Idee wäre es, durch alle Array-Elemente im äußeren Array zu iterieren, die Größe jedes inneren Array zu finden, sicherzustellen, dass die Größen alle den gleichen Wert haben, und dann diesen Wert zurückzugeben, aber das ist ein bisschen intensiv .

Etwas wie folgt aus:

private int getSizeOfInner(){ 

    int size = null; 

    for(ArrayList<Integer> a: outer){ 
     if(size == null){ 
      size = a.size(); 
      } 
     else{ 
      if(a.size() != size){ 
       throw new Exception("Inconsistent inner array sizes"); 
      } 

      } 
     } 
    return size; 
    } 

dies ziemlich viel des Guten für diese Art von Problem scheint ...

+0

Für welche Art von Problem? Warum erstellen Sie überhaupt "List" (s) von "List" (s)? –

+1

denke an es als Integer [] [], aber mit variablen Größen. –

+3

Wenn angenommen wird, dass die inneren Listen alle dieselbe Größe und denselben Typ haben, dann sollten Sie dies durchsetzen, indem Sie sie zu einem Array-Typ und nicht zu einer Array-Liste machen, die eine variable Länge haben soll. – scrappedcola

Antwort

2
int length = outer.get(0).size(); 

aber das ist von Natur aus unsicher und einfach nur schrecklich. Was ist ein besserer Weg dies zu tun?

Nicht sicher, was Sie mit schrecklich meinen. Aber das würde ich tun:

int length = outer.get(0) == null ? 0 : outer.get(0).size(); 
+0

sicher, das würde gut funktionieren –

1

Ich bin der Annahme, hier Sammlung Außen nicht null sein wird

int width = outer.size(); 
int length = CollectionUtils.size(outer.get(0)) 

CollectionUtils ist eine Klasse von Apache API

[org.apache.commons.collec tions.CollectionUtils].

ist es sicher und zuverlässig.