2015-09-16 4 views
7

Così ho una lista di stringhe che ho bisogno di istanziare una volta ogni volta che viene chiamato un servizio. Vale la pena convertire il List<String> in un HashSet<String> e quindi verificare se la stringa è in hashSet?Vantaggi della conversione dell'elenco <String> in HashSet <String> Java

es.

HashSet<String> services = new HashSet<String>((List<String>) services);  

So controllo per la stringa nella lista è O (n) e il controllo per la stringa nel HashSet è O (1). Penso che la conversione sia probabilmente O (n).

Esiste un vantaggio in termini di prestazioni per la rifusione se non cerco più volte nell'elenco?

+0

E ' dubito vedrai un miglioramento delle prestazioni misurabile, specialmente se, come dici, stai solo cercando la struttura alcune volte. –

+0

Dato che dovresti visitare comunque ogni elemento del set per aggiungerlo al set, puoi anche chiamare contiene nell'elenco. –

risposta

7

Nessun vantaggio per la commutazione. La tua analisi delle prestazioni di Bio O è corretta.

+0

Se stavo facendo il controllo più volte ci sarebbe un vantaggio giusto? Più volte aumenta il beneficio per l'interruttore? –

+0

@inquisitiveIdiot sei corretto. – Asaph

+1

La ricerca di n volte nella lista è n * O (n) la ricerca n volte in HashSet è n * O (1), quindi dipende dalla frequenza con cui vengono cercati i dati. Le due soluzioni non sono le stesse. È necessario sapere quanti elementi sono presenti nella lista. e quante ricerche sulla lista sono fatte. –

1

List e Set non sono la stessa cosa:

  • Un elenco è ordinato. Un set non lo è.
  • Un elenco può contenere lo stesso oggetto più volte. Il set non consente duplicazioni.

Così le prime domande che è necessario porsi sono:

  • ho bisogno di duplicazioni nella lista?
  • Ho bisogno di un ordine speciale nella lista?

Se la risposta a entrambe le domande è no, è preferibile utilizzare un hashset anziché l'elenco. Ciò garantirà prestazioni migliori nel recupero degli elementi.

Se non è possibile modificare l'elenco a un HashSet, ma è necessario duplicare le strutture di dati, è necessario controllare meglio il codice per vedere se il tempo della creazione dei è più lento del tempo guadagnato per gli elementi di recupero dei