Diciendo a HashSet cómo ordenar los datos

Estoy intentando crear un HashSet (o cualquier tipo de colección, pero creo que HashSet se adaptará mejor a mí) que permanecerá en orden sin importar lo que se inserte. Es para un proyecto de gestor de contactos en el que estoy trabajando. He estado experimentando, con el siguiente ejemplo.

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);      
   } 
}

Esperaba que la salida pusiera los nombres en orden alfabético, al menos de acuerdo con su nombre o apellido. Sin embargo, ni siquiera puedo discernir el método que usó HashSet para realizar este pedido;

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

Mi pregunta es, ¿cómo le digo a mi programa cómo ordenar los nombres según mis especificaciones?

Respuestas a la pregunta(5)

Su respuesta a la pregunta