ArrayList

Estou com 2 duvidas em um exercicio de ArrayList nesse codigo:

import javax.swing.*;
import java.util.*;
public class Exe001 {
	public static void main(String[] args){
		Exe001 objeto = new Exe001();
		objeto.cadastro();
	}
	public void cadastro(){
		int maisVelho = 0;
		String nomeMaisVelho = "";
		ArrayList nomes = new ArrayList();
		ArrayList idades = new ArrayList();
		
		String nome = JOptionPane.showInputDialog("Nome: ");
		nomes.add(nome);
		
		while(!nome.equals("sair")){
			int idade = Integer.parseInt(JOptionPane.showInputDialog("idade: "));
			idades.add(idade);
			
			nome = JOptionPane.showInputDialog("Nome: ");
			nomes.add(nome);
			
			if(idade > maisVelho)
				maisVelho = idade;
				
		}			
	}
}

As duvidas sao as seguintes: como eu faria pra capturar o nome da pessoa mais velha ali, se eu colocar apenas

 NomeMaisVelho = nome;

Ele vai pegar o ultimo nome digitado e nao o nome do mais velho.
E a segunda duvida é que o exercicio pede pra cadastrar pessoas ate o nome receber a palavra sair.
se eu colocar

String nome = JOptionPane.showInputDialog("Nome: "); nomes.add(nome);
dentro do while primeiro e depois pedir a idade, mesmo quando eu pedir pra sair ele vai pegar a idade denovo, por isso coloquei um antes do while, e outro depois da idade.
tem outra forma melhor de fazer isso sem precisar capturar duas vezes o nome?

Desde ja agradeco a atencao.

Crie uma class Pessoa:

public class Pessoa{
String nome;
Integer idade;
public Pessoa(String n, Integer i){
this.nome = n;
this.idade = i;
public setNome(String n){
this.nome = n;
}
public setIdade(int n){
this.idade = n;
}
public String getNome(){
return this.nome;
}
public Integer getIdade(){
return this.idade;
}
}
}

Depois crie o ArrayList dessa classe e utilize-o na sua aplicação:

import javax.swing.*;  
import java.util.*;  
public class Exe001 {  
    public static void main(String[] args){  
        Exe001 objeto = new Exe001();  
        objeto.cadastro();  
    }  
    public void cadastro(){  
        int maisVelho = 0;  
        String nomeMaisVelho = "";  
        ArrayList pessoas = new ArrayList<Pessoa>();          
          
        while(1)){  
            String nome = JOptionPane.showInputDialog("Nome: ");  
            if(nome.equals("sair")) break;  // ele vai sair do looping infinito quando vc digitar a palavra "sair". Senão ele continua com a aplicação.
                             
            Integer.parseInt(JOptionPane.showInputDialog("idade: "));  
            idades.add(idade);  
            
            pessoas.add(new Pessoa(nome,idade));
        }       
        //Depois que sai do looping vc pode processar a descoberta do mais velho por um iterator
         
           Pessoa maisVelha = new Pessoa();
           for (Iterator<Pessoa> it = nomes.iterator(); it.hasNext();) {
                     Pessoa P = it.next(); 
                     if(P.getidade() > maiorIdade){
                               maisVelha.setNome(P.getname());
                               maisVelha.setIdade(P.getIdade());
                       }
           }
        }  
}  

Espero que tenha ajudado.