Java: ¿Buscar en claves HashMap basadas en expresiones regulares?

Estoy creando un diccionario de sinónimos usando un HashMap para almacenar los sinónimos.

Estoy tratando de buscar las palabras en función de una expresión regular: el método tendrá que tomar una cadena como parámetro y devolver una matriz de resultados. Aquí está mi primer intento:

public ArrayList<String> searchDefinition(String regex) {
    ArrayList<String> results = new ArrayList<String>();

    Pattern p = Pattern.compile(regex);

    Set<String> keys = thesaurus.keySet();
    Iterator<String> ite = keys.iterator();

    while (ite.hasNext()) {
        String candidate = ite.next();
        Matcher m = p.matcher(candidate);
        System.out.println("Attempting to match: " + candidate + " to "  + regex);
        if (m.matches()) {
            System.out.println("it matches");
            results.add(candidate);
        }
    }   

    if (results.isEmpty()) {
        return null;
    }
    else {
        return results;
    }
}

Ahora, esto no funciona como era de esperar (o tal vez estoy usando expresiones regulares de forma incorrecta). Si tengo las siguientes claves en el hashmap:

cat, car, chopper

then llamando asearchDefinition("c") osearchDefinition("c*") Yo obtengonull.

¿Cómo hago que esto funcione como se esperaba?Hay una mejor estructura de datos que HashMap para mantener unagraph como lo necesita un tesauro? (solo curiosidad, en cuanto a esta tarea, se nos pide que usemos Java Collection Map). ¿Algo más que estoy haciendo de manera inapropiada en el código anterior?

Gracias, Dan

EDIT: he corregido el ejemplo. No funciona incluso si uso el caso correcto.

Respuestas a la pregunta(12)

Su respuesta a la pregunta