Quale sarebbe una corretta implementazione di un dizionario in java?

0

Il problema:

Diciamo che voglio creare un'app java (che attualmente usa java 8) che funziona come un dizionario. Voglio che l'app fornisca all'utente la capacità di aggiungere e cercare parole, ogni parola deve contenere un nome , un significato e zero o più esempi . Inoltre, voglio che l'utente sia in grado di aggiungere altri esempi a una parola già memorizzata nel dizionario e di aggiungere più significati alla stessa parola, per questo il dizionario deve rilevare quando un utente prova ad aggiungere una parola duplicata e invece di creare una nuova voce, dovrebbe aggiungere le nuove informazioni per la parola già esistente. Infine, ho bisogno che l'app memorizzi tutte queste informazioni in modo che non le dimenticalo ogni volta che l'utente chiude l'applicazione.

Il mio approccio:

Ovviamente, non sto chiedendo a tu di implementare questa app, quindi ecco la mia idea. So che java ha una classe Dictionary , quindi potrei creare un Hashmap<String, Word> per gestire tutte le voci del dizionario, dove la chiave sarebbe il 'nome' della parola, e Word sarebbe essere un oggetto contenente i significati e gli esempi come due elenchi di stringhe. In questo modo ho potuto facilmente cercare una parola e aggiungere o recuperare informazioni dall'oggetto Word. Inoltre, in questo modo, se l'utente tenta di aggiungere una parola, se Hashmap contiene già la parola, non creerà un nuovo oggetto di Word, ma aggiungerà le informazioni a una esistente (una specie di cosa faresti con un peso mosca) .

Ora, per memorizzare il dizionario, dato che la mia idea è di lavorare con oggetti Word, stavo pensando di usare un file JSON per memorizzare il dizionario come una serie di parole.

La domanda:

Ora, come ho detto, non sto richiedendo un'implementazione di questa app. Quello che voglio sapere è se il mio approccio è una buona idea e magari discutere alcune implementazioni alternative. Quindi, una Hashmap è una buona struttura per mantenere un dizionario? È una buona idea usare un oggetto Word? Utilizzare un file JSON è un buon modo per archiviare questo tipo di dati?

Bonus: Cosa succede se voglio aggiungere le parole in ordine alfabetico?

    
posta Roäc 21.07.2017 - 17:12
fonte

1 risposta

3

Il tuo design ha più entità con relazioni rigide tra di loro. Hai un insieme di parole, ognuna delle quali ha un insieme di significati, un insieme di parole correlate (ad esempio diversi tempi di verbi, plurali di nomi, ecc.) E così via. I significati hanno definizioni e citazioni. Potresti avere riferimenti incrociati tra entità. Tutte queste cose sono relazioni ben definite tra entità di tipi finiti con attributi ben noti che possono essere determinati in anticipo. Inoltre, non hai entità che si annidano dentro di sé ma invece hanno un piatto , gerarchia predefinita di tipi nidificati staticamente . Desideri anche la persistenza, ma i tuoi dati sono abbastanza grandi da caricarli e salvarli nella loro interezza, potrebbero causare problemi di prestazioni, quindi hai bisogno di accesso rapido ai sottoinsiemi dei dati per lavorare con .

Tutti questi fattori suggeriscono l'uso di un database relazionale piuttosto che di una struttura ricorsivamente definita come JSON, che è probabilmente più difficile da utilizzare e meno performante.

    
risposta data 21.07.2017 - 21:36
fonte

Leggi altre domande sui tag