Tamanho de ArrayList bidimensional em Java

Eu sempre achei isso problemático, essencialmente um ponteiro nulo garantido na maioria dos casos.

Digamos que temos um ArrayList bidimensional, assim:

ArrayList<ArrayList<Integer>> outer; 

Agora, quero obter as dimensões das matrizes internas (assumimos que todas elas devem ter o mesmo tamanho).

Costumo achar que faço isso:

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

mas isso é inerentemente inseguro e simplesmente horrível. Qual é a melhor maneira de fazer isso?

Uma idéia melhor seria percorrer todos os elementos da matriz externa, encontrar o tamanho de cada matriz interna, garantir que os tamanhos tenham o mesmo valor e retornar esse valor, mas isso é um pouco intenso.

Algo assim:

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

isso parece um exagero para esse tipo de problema ...

Resposta 1
int length = outer.get(0).size();

mas isso é inerentemente inseguro e simplesmente horrível. Qual é a melhor maneira de fazer isso?

Não sei o que você quer dizer com horrível. No entanto, é isso que eu faria:

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

Eu li o Java Concurrency in Practice e fico com esta pergunta: quando eu uso um ConcurrentHashMap, quais problemas de simultaneidade de dados discutidos na Parte Um do livro ainda preciso me preocupar ...

Eu tenho um leitor de arquivos, que retorna as linhas de um arquivo como um objeto []. Eu estou usando o método de linhas. Seria mais rápido usar o readAllLines? Não uso o fluxo para mais nada, mas quero ...

Eu tenho que baixar um arquivo xml do servidor usando o navegador IE. response.setContentType ("application / octet-stream"); response.setHeader ("Content-Disposition", "attachement; filename = xyz.xml"); ...

Eu tenho um JPanel, nele são adicionadas uma imagem e um rótulo, nessa ordem. É muito improvável que mais sejam adicionados ao painel. A formatação padrão fica bem quando é exibida, apesar de mim ...