Java: Pesquisa nas chaves HashMap com base no regex?

Estou construindo um dicionário de sinônimos usando um HashMap para armazenar os sinônimo

Estou tentando pesquisar as palavras com base em uma expressão regular: o método precisará usar uma string como parâmetro e retornar uma matriz de resultados. Aqui está minha primeira facada:

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

Agora, isso não funciona como eu esperaria (ou talvez eu esteja usando expressões regulares incorretamente). Se eu tiver as seguintes chaves no hashmap:

cat, car, chopper

depois ligando parasearchDefinition("c") ousearchDefinition("c*") Eu recebonull.

Como faço para que isso funcione conforme o esperado? Existe uma estrutura de dados melhor que o HashMap para manter umgraph como necessário por um dicionário de sinônimos? (apenas por curiosidade, quanto a essa tarefa, pedimos para usar o Java Collection Map). Mais alguma coisa que estou fazendo de maneira inadequada no código acim

Obrigado, Dan

EDIT: Corrigi o exemplo. Não funciona mesmo se eu usar o caso correto.

questionAnswers(6)

yourAnswerToTheQuestion