2016-09-19 2 views
2

Я всегда считал это проблематичным, по сути, гарантированным нулевым указателем в большинстве случаев.Размер 2-мерного ArrayList в Java

Скажем, у нас есть двумерный 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

Для каких проблем? Почему вы создаете «Список» (-ов) «Список» (ов) в первую очередь? –

+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 является классом Apache API

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

безопасно и надежно.

Смежные вопросы