CastException String to Long como fazer o cast correto?

Olá…
Estou com um problema de cast que não estou conseguindo resolver. Já dei uma lida no forum mas nada resolveu.
O problema pode ser resumido com o código abaixo:
eu preciso tratar uma estrutura de dados parecida com:

ArrayList dados = new ArrayList();		
// Alimenta as linhas de dados
dados.add(new String[] {"111111", "SPPP", "10102004"});
dados.add(new String[] {"222222", "RJJJJ", "10102004"});
dados.add(new String[] {"323232", "RRRRN", "10102004"});
dados.add(new String[] {"353485", "R24J", "10102004"});
dados.add(new String[] {"0950984", "RN476", "10102004"});

O metodo que faze isso é parecido com:

public void metodoTratador(ArrayList dados){

   ClasseQueTrataDados tratar =  ClasseQueTrataDados();
   ArrayList allData = dados;
   Iterator iterar = allData.iterator();

while(iterar.hasNext()){	
   // imprimi o conteudo do primeiro resitro... 
  System.out.println(" conteudo do  data.get(0) "+(allData.get(0)));

  // o CastException  acontece logo de cara no no primeiro cast...
   tratar.setCampoId(Long.parseLong((String)(allData.get(0))));
   tratar.setCampoTipo((String) allData.get(1));
   tratar.setCampoData(new Date( (String)data.get(2)));
   }

O conteudo do primeiro registro (allData.get(0)) é:
conteudo do data.get(0) [Ljava.lang.String;@16925b0.
Não é acusado nehum erro de cast na compilação…

Tenho 3 perguntas que procuro por respostas:

1º Como fazer o cast corretamente?
2º A implementação do laço (while) está correto, ie, vai percorrer
adequadamente o Arraylist?
3º new Date(…) aparece com depreciado qual outro metodo q eu poderia usar pra converter uma string para um tipo data, mais especificamente, existe algum metodo da SimpleDateFormat que faça isso?
Desde já agradeço pela atenção…

1º Como fazer o cast corretamente?
R: Cara o que vc está adicionando em dados é um array de strings e não apenas uma string, ou seja vc não pode tentar converter como se fosse uma e somente uma string diretamente.

2º A implementação do laço (while) está correto, ie, vai percorrer
adequadamente o Arraylist?
R: Não - Você precisa executar a intrução iterar.next();

3º new Date(…) aparece com depreciado qual outro metodo q eu poderia usar pra converter uma string para um tipo data, mais especificamente, existe algum metodo da SimpleDateFormat que faça isso?
R: De uma olhada em Calendar ou GregorianCalendar.

T+

Uma sugestão.

Ao invés de:
while(iterar.hasNext()){

faça:
while(iterar.next()){

Olá…
O problema foi resolvido com :

while(iterar.hasNext()) {
             String[] dados = (String[])iterar.next();
             tratar.setCampoId(Long.parseLong(dados[0]));
             tratar.setCampoTipo(dados[1]);
             tratar.setCampoData(new Date(dados[2]));
         }

Valeu pela ajuda…