Dizendo HashSet como classificar os dados

Estou tentando criar um HashSet (ou qualquer outro tipo de coleção - mas acho que o HashSet será o melhor para mim) que permanecerá em ordem, independentemente do que for inserido. É para um projeto de gerente de contatos em que estou trabalhando. Eu tenho experimentado, com o exemplo abaixo.

import java.util.*;

public class TestDriver{

    public static void main(String[] args)
    {
        FullName person1 = new FullName("Stephen", "Harper");
        FullName person2 = new FullName("Jason", "Kenney");
        FullName person3 = new FullName("Peter", "MacKay");
        FullName person4 = new FullName("Rona", "Ambrose");
        FullName person5 = new FullName("Rona", "Aabrose");


        HashSet<FullName> names = new HashSet<FullName>();

        names.add(person3);
        names.add(person1);
        names.add(person4);
        names.add(person2);

        System.out.println(names);      
   } 
}

Eu esperava que a saída colocasse os nomes em ordem alfabética - pelo menos de acordo com seu primeiro ou último nome. No entanto, eu nem consigo discernir o método usado pelo HashSet para fazer essa ordenação;

[Jason Kenney, Rona Ambrose, Stephen Harper, Peter MacKay]

Minha pergunta é: como eu digo ao meu programa como classificar os nomes com base em minhas especificações?

questionAnswers(5)

yourAnswerToTheQuestion