2015-09-16 11 views
7

Mam więc listę ciągów, których potrzebuję do utworzenia instancji za każdym razem, gdy wywoływana jest usługa. Czy warto przekonwertować List<String> na HashSet<String>, a następnie sprawdzić, czy ciąg jest w hashSet?Korzyści z konwertowania listy <String> na HashSet <String> Java

np.

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

wiem sprawdzania ciąg na liście jest O (n) oraz czek na ciąg w Hashset wynosi O (1). Myślę, że konwersja to prawdopodobnie O (n).

Czy istnieje przewaga wydajności nad przekształceniem, jeśli nie przeszukuję listy więcej niż kilka razy?

+0

To wątpliwe, że zauważysz wymierną poprawę wydajności, szczególnie jeśli, jak wspomniałeś, przeszukujesz strukturę tylko kilka razy. –

+0

Ponieważ musisz mimo wszystko odwiedzić każdy element w zestawie, aby dodać go do zestawu, równie dobrze możesz po prostu zawrzeć połączenie na liście. –

Odpowiedz

7

Nie ma korzyści z przełączania. Twoja analiza wydajności Bio O jest prawidłowa.

+0

Gdybym robił czek wiele razy, czy byłby to odpowiedni zasiłek? Im więcej razy większa korzyść z przełącznika? –

+0

@InteritiveIdiot masz rację. – Asaph

+1

Wyszukiwanie n razy na liście to n * O (n) wyszukiwanie n razy w HashSet to n * O (1), więc zależy to od częstotliwości wyszukiwania danych. Oba rozwiązania nie są takie same. Trzeba wiedzieć, ile elementów znajduje się na liście. i ile reaserch na liście zostało zrobionych. –

1

List i Set nie to samo:

  • lista jest sortowana. Zestaw nie jest.
  • Lista może zawierać ten sam obiekt wiele razy. Zestaw nie pozwala na duplikacje.

Więc pierwsze pytania, które trzeba zadać sobie to:

  • muszę powielania w liście?
  • Potrzebuję specjalnego zamówienia na liście?

Jeśli odpowiedź na oba pytania brzmi "nie", lepiej użyć HashSet zamiast Listy. Zapewni to lepszą wydajność odzyskiwania elementów.

Jeśli nie można zmienić listę do HashSet ale trzeba powielać struktury danych należy sprawdzić lepiej swój kod, aby zobaczyć, czy czas utworzenia zestaw jest wolniejszy niż raz zdobytej elementów przywoływania

Powiązane problemy