Erro na execução!

Situação: Criar uma classe de alunos com atributos nome e nota. Criar uma classe Disciplina que tenha um ArrayList de alunos.
Criar uma classe OrdenaAlunoPorNota implementando a interface Comparator<> de Aluno, e nela fazer a comparação de suas notas, considerando que um aluno está na frente do outro se sua nota for maior. Criar um classe main, de modo que adicione os alunos no ArrayList e mostre de forma ordenada as notas dos alunos.

public class Aluno {

	String nome;
	String nota;
	
	public Aluno(String nome, String nota) {
		this.nome = nome;
		this.nota = nota;
	}
	
	public String getNome() {
		return nome;
	}
	public String setNome(String nome) {
		return this.nome = nome;
	}
	public String getNota() {
		return nota;
	}
	public String setNota(String nota) {
		 return this.nota = nota;
	}
	
}
 // Classe Disciplina e MAIN

import java.util.*;

public class Disciplina {

	public static void main(String[] args) {
			
			ArrayList<Aluno> listAlunos = new ArrayList<Aluno>();
			 Aluno a1 = new Aluno("Jonnie", "10");
			 Aluno a2 = new Aluno("Zezinho", "8.5");
			 Aluno a3 = new Aluno("Bianca", "6");
			 
			listAlunos.add(1, a1);  //add elementos no arrayList no indice 1
			listAlunos.add(2, a2);  //add elementos no arrayList no indice 2
			listAlunos.add(0, a3);  //add elementos no arrayList no indice 0
			
			Collections.sort(listAlunos, new OrdenaAlunoPorNota());  //ordenação dos elementos
			
			Iterator it = listAlunos.iterator();
				while (it.hasNext()) {  //Enquanto tiver elementos
					String aluno = (String) it.next();	//Obter prox elemento
				if (listAlunos.equals("Jonnie")) {  //Comparação com o elemento a ser excluido
					it.remove(); 	// remoção do elemento
			 	}
				
			}
			
		}
	}

// Classe OrdenaAlunoPorNota

import java.util.Comparator;


public class OrdenaAlunoPorNota implements Comparator<Aluno> {

	
	public int compare(Aluno a1, Aluno a2) {
		return a1.nota.compareTo(a2.nota);
		
	}

	
}

Creio que o código esteja todo correto, porém, na hora de rodar, ele exibe o seguinte erro:
[color=red]Exception in thread “main”[color=blue] java.lang.IndexOutOfBoundsException[/color]: Index: 1, Size: 0
at java.util.ArrayList.rangeCheckForAdd(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at Main.main(Main.java:15)[/color]

Se pudessem me ajudar, ficarei grato.
Até mais!

experimente assim:

listAlunos.add(0, a3); // add elementos no arrayList no indice 0 listAlunos.add(1, a1); // add elementos no arrayList no indice 1 listAlunos.add(2, a2); // add elementos no arrayList no indice 2

acredito q vc precisa preencher primeiro os primeiros indicies.

att,

[edit]
é na vdd vc não pode adicionar o indice 2(terceiro item) se não tiver o primeiro e segundo.
msm coisa vc tentar adicionar ao primeirio indice dps de adicionar o 2 e 3 itens.
[/edit]

jovem padawan,

listAlunos.add(a1); //add elementos no arrayList no indice 1 listAlunos.add(a2); //add elementos no arrayList no indice 2 listAlunos.add(a3); //add elementos no arrayList no indice 0

no método add do list você não precisa passar os índices, mas se quiser, passe na ordem correta de inicialização como o pedruhenrik falou, iniciando no zero.

depois, outra recomendação é utilizar as notas como um número mesmo, tipo double, pq se as notas forem strings, na hora de comparar e ordenar tu vai ordenar strings e não valores numéricos, pode ser que fique errado a ordem que você deseja.

Aí ficaria como abaixo:

String nome; double nota;

Aluno a1 = new Aluno("Jonnie", 10);  

public int compare(Aluno a1, Aluno a2) { return a1.nota > a2.nota ? 0 : 1; }

++;

passei despercebido nesse detalhe.

att,

Saquei, valeu a ajuda, caras!

Mas seguinte, eu tentei passar o atributo nota como double/float, porém, na hora que vou implementar o método compareTo(Aluno a1, Aluno a2), ele fica dando pois o método é INT, dando assim algum erro.