/** * TabelaOcorrencias: cria uma tabela de 2 colunas (Palavra, Número de Ocorrências) *@author Gustavo Sverzut Barbieri , Ivens Prates Telles Alves */ import java.util.TreeMap; import java.util.LinkedList; import java.util.Arrays; public class TabelaOcorrencias { private TreeMap armazenagem = null; /** * TabelaOcorrencias: cria uma tabela de ocorrência das palavras */ public TabelaOcorrencias() { armazenagem = new TreeMap(); } /** * adiciona: adiciona uma palavra à tabela *@param palavra a ser adicionada à tabela */ public void adiciona(String palavra) { int ocorrencias=0; try { ocorrencias = (armazenagem.get(palavra) == null) ? 1 : ((Integer) armazenagem.get(palavra)).intValue() + 1; if (ocorrencias > 1) armazenagem.remove(palavra); armazenagem.put(palavra,new Integer(ocorrencias)); } catch (Exception e) { System.err.println("Exceção não pega: "+e); } } /** * paraVetor: retorna um vetor com elementos (palavra, ocorrências) ordenado crescentemente *@return vetor com pares (palavra, ocorrências) ordenados crescentemente pelo número de ocorrências */ public ElementoTabelaOcorrencias[] paraVetor() { // clone armazenagem: TreeMap armazenagem_clone = (TreeMap) armazenagem.clone(); // retire cada elemento de 'armazenagem_clone' e o coloque em 'ocorrencias_sorted' LinkedList lista = new LinkedList(); String palavra; Integer ocorrencias; while (armazenagem_clone.size() > 0) { // Retire o último elemento de 'armazenagem_clone' e pegue os dados palavra = (String) armazenagem_clone.lastKey(); ocorrencias = (Integer) armazenagem_clone.remove(palavra); // Insira ordenado na lista ligada 'lista' int i; for (i=0; ( (i < lista.size()) && (((ElementoTabelaOcorrencias) lista.get(i)).pegaOcorrencias() < ocorrencias.intValue()) ); i++) { } lista.add(i,new ElementoTabelaOcorrencias(palavra,ocorrencias.intValue())); } // Copie a lista para um vetor (cast com toArray() não funcionou) ElementoTabelaOcorrencias[] retorno = new ElementoTabelaOcorrencias[lista.size()]; for (int i=0; i < lista.size(); i++) retorno[i] = (ElementoTabelaOcorrencias) lista.get(i); return retorno; } public void limpa() { armazenagem.clear(); } } /** * ElementoTabelaOcorrencias: um par do tipo (palavra, número de ocorrências) */ class ElementoTabelaOcorrencias { private String palavra = null; private int ocorrencias = 0; public ElementoTabelaOcorrencias(String palavra, int ocorrencias) { mudaPalavra(palavra); mudaOcorrencias(ocorrencias); } public void mudaPalavra(String palavra) { this.palavra = palavra; } public void mudaOcorrencias(int ocorrencias) { this.ocorrencias = ocorrencias; } public String pegaPalavra() { return palavra; } public int pegaOcorrencias() { return ocorrencias; } }