2017-10-29 14 views
6

Moim zdaniem duplikaty nie są dozwolone w zestawie Javy. Dlaczego w tym fragmencie kodu wydaje się, że kod próbuje wziąć pod uwagę duplikaty?Wstawianie do hashmap, rozliczanie duplikatów w zestawie?

public static Subarray findSmallestSubarrayCoveringSet(List<String> paragraph,Set<String> keywords) { 

    Map<String, Integer> keywordsToCover = new HashMap<>(); 
    for (String keyword : keywords) { 
     keywordsToCover.put(keyword, 
     keywordsToCover.containsKey(keyword)? keywordsToCover.get(keyword) + 1: 1); 
    } 

Dlaczego po prostu nie ma słów kluczowychToCover.put (słowo kluczowe, 1) w pętli for?

+0

Masz rację, kod nie ma sensu. Skąd to jest? – shmosel

+0

https://books.google.co.uk/books?id=ux3PCwAAQBAJ&pg=PA219&lpg=PA219&dq=keywordsToCover+%3D+new+HashMap&source=bl&ots=XlidougYH6&sig=plWNqvW6_Wfesq0sDpeyZ5caClg&hl=en&sa=X&ved=0ahUKEwja296k1JbXAhVHM5oKHdUgAWAQ6AEIKDAB#v=onepage&q=keywordsToCover%20 % 3D% 20new% 20HashMap & f = false –

Odpowiedz

1

Jesteś tutaj poprawne, połączenie keywordsToCover.containsKey(keyword) będzie nigdy być prawda. Wydaje się po prostu, że ktokolwiek napisał kod, nie rozumiał, jaki jest cel Set lub popełnił błąd (choć jest to mało prawdopodobne). w związku z tym wystarczy połączenie keywordsToCover.put(keyword,1).

0

Masz rację, jak mówi w the Javadoc:

Set to zbiór, który nie zawiera zduplikowane elementy.

Kto kiedykolwiek napisał, że próbka nie jest tego świadoma.

Będzie nigdy być przypadek gdzie keywordsToCover.containsKey(keyword) powraca prawda, chyba keywordsToCover jest inicjowany (poza metody) jako statyczny i jest nie zrekonstruowany za każdym razem findSmallestSubarrayCoveringSet jest tzw.