2016-09-19 10 views
2

私はこれが問題であることを常に見出していました。ほとんどの場合、本質的に保証されたヌルポインタです。 Javaの2次元ArrayListのサイズ

は、我々はそうのように、2次元のArrayListを持って言う:

ArrayList<ArrayList<Integer>> outer; 

は今、私は内側の配列の大きさを取得したい(私たちは、彼らがすべて同じサイズであることを前提とし)。

私は、多くの場合、私はこれを行うことを見つける:

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

が、これは本質的に安全、ちょうど恐ろしいです。これを行う良い方法は何ですか?

外部配列のすべての配列要素を繰り返し処理し、各内部配列のサイズを調べ、サイズがすべて同じ値であることを確認してからその値を返すことをお勧めしますが、 。このような

何か:私はここで収集外側を想定しています

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

これはこの種の問題のために、かなりやり過ぎだ...

+0

どのようなタイプの問題?最初に 'List'(s)の' List'(s)を作成するのはなぜですか? –

+1

はInteger [] []と考えるが、サイズは可変である。 –

+3

内側のリストのサイズとタイプがすべて同じであると仮定すると、可変長であることを意味する配列リストではなく、配列タイプにすることで強制する必要があります。 – scrappedcola

答えて

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

が、これは本質的に安全、ちょうど恐ろしいです。これを行うには、より良い方法は何ですか?

あなたは恐ろしいことを意味するのか分かりません。しかし、これは私がやることです:

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

これはうまくいくと確信しています –

1

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

CollectionUtils nullになりませんApache APIのクラスです

[org.apache.commons.collec集会所]。

安全で信頼性が高い。