Utilização de Map

Olá a todos,
Tenho um aplicativo que pede o nome, a primeira e segunda nota de alguns alunos, até a pessoa deixar o campo do nome em branco, depois ele mostra os nomes em ordem alfabética, com a primeira e segunda nota, e embaixo a média. Após mostrar a média de todos alunos, ele mostra a média geral. Consegui fazer, mas gostaria de fazê-lo usando Maps, o problema é que no final do aplicativo, as notas que estão relacionadas com os alunos, não são as mesmas digitadas, os nomes ficam em ordem alfabética, porém as notas ficam todas invertidos por conta disso.

O que eu fiz é isso, gostaria que alguém me falasse o que eu estou fazendo de errado.
PS.: Quero fazer usando Maps, abraço à todos e obrigdo pela atenção

import java.util.*;
import javax.swing.*;

public class Alunos {
	public static void main(String[] args) {

		ArrayList<String> Alunos = new ArrayList<String>();  
		ArrayList Nota1 = new ArrayList();					
		ArrayList Nota2 = new ArrayList();
		ArrayList Media = new ArrayList();
		ArrayList Aprovacao = new ArrayList();
		Map mapaDeNotas = new HashMap();
		Map mapaDeMedias = new HashMap();
		Map mapaDeAprovacao = new HashMap();

		String nome;
		double nota1, nota2, media, mediageral = 0;

		do {

			nome = JOptionPane.showInputDialog(null,"Informe o nome do aluno ou aperte <Enter> com o campo em branco para encerrar o programa: ");
			if (!nome.equals("")) {
				Alunos.add(nome);
				Collections.sort(Alunos);
			    nota1 = Double.parseDouble(JOptionPane.showInputDialog(null,"Informe a primeira nota do aluno"));
			    Nota1.add(nota1);
			    mapaDeNotas.put( nota1, nome);
			    nota2 = Double.parseDouble(JOptionPane.showInputDialog(null,"Informe a segunda nota do aluno "));
			    Nota2.add(nota2);
			    mapaDeNotas.put( nota2, nome);
			    media = (nota1+nota2) /2;
			    Media.add(media);
			    mapaDeMedias.put(nome, media);
			    if ( media >=6) {
			      Aprovacao.add("Aprovado!");
			      mapaDeAprovacao.put(nome, "Aprovado!");
			    }
			    else {
				  Aprovacao.add("Reprovado!");
				  mapaDeAprovacao.put(nome, "Reprovado!");
				}
			    mediageral +=media;
		  }
		
		} while (!nome.equals(""));
	
		for (int i = 0; i < Alunos.size(); i++) {
			JOptionPane.showMessageDialog(null, "Aluno " + Alunos.get(i)+ "\nPrimeira nota:  " + Nota1.get(i) + "\nSegunda nota: "+ Nota2.get(i) + "\nMédia: " + Media.get(i) + "\n"+ Aprovacao.get(i));

		}
		if(Alunos.size()!=0) {
		  JOptionPane.showMessageDialog(null, "Média geral da turma: "+ mediageral / Alunos.size());
		}
	}
}

cara no momento que vc usa o

Collections.sort(Alunos);  

voce perde a relação de indices do aluno com os indices das notas…

então tu não pode tentar fazer isso aqui

for (int i = 0; i < Alunos.size(); i++) {  
JOptionPane.showMessageDialog(null, "Aluno " + Alunos.get(i)+ "\nPrimeira nota:  " + Nota1.get(i) + "\nSegunda nota: "+ Nota2.get(i) + "\nMédia: " + Media.get(i) + "\n"+ Aprovacao.get(i));  

Bom o ideal mesmo e que voce utilize um Map usando o nome do Aluno como chave e somente um ArrayList(contendo as 3 notas) como Value do map

feito isso voce pode ordenar o mapa passando ele para um TreeMap

Map sortedMap = new TreeMap(seuMapAqui);

pronto aqui ja vai ta ordenado, ai depois voce resgata o keySet(nomedosalunos) desse mapa…
com as key em mãos você já pode iterar pelo mapa e retornar os valores(notas).

bom é assim que eu faria não vo postar código que pelo visto vc é capaz de fazer sozinho tranquilo…

qualquer duvida é so falar que eu acesso guj toda manha no trampo : D.

Vou dar uma pesquisada sobre TreeMap e tentar, obrigado.