/** * Questa classe implementa alcuni metodi utili per provare le prestazioni degli algoritmi di * ricerca e ordinamento. */ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; public class Dictionary { /** * Queto metodo legge un elenco di parole in inglese all'indirizzo * https://github.com/dwyl/english-words/raw/master/words.txt e lo restituisce come un array di * stringhe. Il parametro len specifica il numero massimo di parole da leggere. */ public static String[] getOnlineDictionary(int len) throws IOException { URL url = new URL("https://github.com/dwyl/english-words/raw/master/words.txt"); InputStream is = url.openConnection().getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = null; var x = new ArrayList(); while ((line = reader.readLine()) != null && len > 0) { x.add(line); len -= 1; } var ris = x.toArray(new String[0]); Arrays.sort(ris); return ris; } /** * Variante di getOnlineDictionary() che legge tutto il file. */ public static String[] getOnlineDictionary() throws IOException { return getOnlineDictionary(Integer.MAX_VALUE); } /** * Queto metodo legge un elenco di parole in inglese da un file che si chiama words.txt e lo * restituisce come un array di stringhe. Il parametro len specifica il numero massimo di parole * da leggere. */ public static String[] getOfflineDictionary(int len) throws IOException { File f = new File("words.txt"); BufferedReader reader = new BufferedReader(new FileReader(f)); String line = null; var x = new ArrayList(); while ((line = reader.readLine()) != null && len > 0) { x.add(line); len -= 1; } reader.close(); var ris = x.toArray(new String[0]); Arrays.sort(ris); return ris; } /** * Variante di getOfflineDictionary() che legge tutto il file. */ public static String[] getOfflineDictionary() throws IOException { return getOfflineDictionary(Integer.MAX_VALUE); } /** * Questo metodo esegue la funzione f e visualizza il tempo di esecuzione. */ public static void timeIt(Runnable f) throws Exception { long startTime = System.nanoTime(); f.run(); long endTime = System.nanoTime(); double time = (endTime - startTime) * 1.0 / 1_000_000_000; System.out.printf("Tempo di esecuzione: %.3f secondi\n", time); } }