Reputation: 501
So to my knowledge duplicates are not allowed in a Java set. Why then in this code snippet does the code seem to try to take account of duplicates?
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);
}
Why not just have keywordsToCover.put(keyword,1) inside the for loop?
Upvotes: 6
Views: 49
Reputation: 3430
You are correct, as it says in the Javadoc:
a
Set
is a collection that contains no duplicate elements.
Who ever wrote that sample is unaware of this fact.
There will never be a case where keywordsToCover.containsKey(keyword)
returns true, unless keywordsToCover
is initialized (outside of the method) as static and is not reconstructed every time findSmallestSubarrayCoveringSet
is called.
Upvotes: 0
Reputation: 56489
You're correct here, the call keywordsToCover.containsKey(keyword)
would never be true. It just seems that whoever wrote the code didn't understand what is the purpose of a Set
or they have mistakenly done so (though that's unlikely). thus just the call keywordsToCover.put(keyword,1)
would suffice.
Upvotes: 1