2010-08-05 3 views
7

Sto utilizzando Java e sto cercando raccolte di stringhe (insiemi ed elenchi) ottimizzate nello spazio e veloci. Le mie corde sono di dimensioni fisse: lunghe 3 o 5 caratteri.Raccolte di stringhe veloci in Java

Per favore suggeriscimi se ci sono librerie di raccolta disponibili che possono essere più adatte a me. Stavo pensando ad alcune raccolte basate sul dizionario.

Grazie.

+7

Quale lingua/piattaforma? –

+4

Quante stringhe hai, grosso modo? Migliaia? Milioni? Miliardi? –

risposta

0

Supponendo che si stia parlando di C o C++, poiché non riesco a immaginare nessun altro linguaggio in cui qualcuno potrebbe cercare una libreria di stringhe, consiglierei di utilizzare bstring entro il Paul Hsieh.

Anche se non ho mai usato io stesso, perché semplicemente non ha funzionato nel mio caso, ho adattato al mio uso nel 2007 prendendo i suoi concetti come base. È molto ben documentato e, per lo meno, puoi imparare un sacco di cose sulle stringhe semplicemente andando a quei link e leggendo sul materiale di Paul.

1

Se volessi velocità userei C++ e STL e una classe di stringhe personalizzata fissata a 8 byte. 8 byte è ben allineato ed è a 64 bit, quindi può essere confrontato in una singola istruzione macchina.

Utilizzando l'STL è possibile scegliere di utilizzare un std :: set, una std :: map, un unordered_set, un std :: list o qualsiasi altra struttura compatibile STL.

+0

Ciao, sto cercando di ottimizzare il codice java. L'applicazione utilizza molte raccolte di stringhe e le mie stringhe sono di dimensioni fisse – niraj

+0

@niraj: non l'hai detto nella tua domanda. Modificherò la tua domanda per te ma devi specificare quali lingue e piattaforme stai chiedendo nelle tue domande. –

3

'raccolte basate su dizionario'? HashMap è una scelta predefinita. È veloce come O (1). E non ha nulla con la dimensione dell'elemento fissata o meno.

3

Se si intende una raccolta di stringhe, mi piacerebbe andare con default di Java HashSet. Se hai bisogno di qualcosa ancora più veloce (in termini di tempo di ricerca), puoi usare uno Trie. Tries fornisce una ricerca molto veloce (O (lunghezza della stringa)) indipendentemente dal numero di stringhe nella struttura dati e può essere molto compatto.

Ma, si prega di verificare il codice con HashSet prima. Con fino a diversi milioni di stringhe di piccole dimensioni, non immagino che sarebbe molto lento.

2

non si può davvero avere una "collezione veloce" in generale, perché ogni Datastructures hanno la loro forza e di debolezza.

Se volete velocemente aggiunta e l'iterazione, ArrayList s sono buoni. Se fai un bel po 'di rimozione, potresti voler usare LinkedList s. Se si desidera effettuare ricerche veloci, HashSet s sono validi, ecc.

Se si dispone di accesso simultaneo, esistono anche altre strutture dati potenzialmente più adatte. A volte anche la combinazione di più di una infrastruttura dati può essere d'aiuto.

In breve, è necessario dirci per che cosa si utilizzerà la struttura dati.