Warum erlaubt ImmutableSet Duplikate, aber ImmutableMap nicht

8

Ich habe gemerkt (und geschätzt!), dass Guavas ImmutableMap.Builder nicht erstellt werden kann, wenn dem Builder doppelte Schlüssel hinzugefügt wurden. Dasselbe Verhalten (doppelte Elemente hinzufügen) ist jedoch mit ImmutableSet erfolgreich.

Gibt es einen Grund für diesen Unterschied und einen guten Weg, ein ImmutableSet mit dem gleichen Fehlerverhalten zu konstruieren?

Testfall:

%Vor%     
dimo414 04.11.2013, 17:51
quelle

1 Antwort

10

Ja, dieses Verhalten ist beabsichtigt. Hier ist eine Möglichkeit, darüber nachzudenken: Set s werden häufig aus anderen Collection s erstellt, insbesondere List , die Duplikate enthalten können. Es wäre sehr umständlich - und ineffizient -, wenn Benutzer ImmutableSet.copyOf(Sets.newHashSet(element)) schreiben müssten, wenn es Dubletten geben könnte. Auf der anderen Seite wird Map s normalerweise aus anderen Map s erstellt, die keine doppelten Schlüssel haben können.

Wenn Sie doppelte Elemente verbieten möchten, ist Ihre beste Wette etwas wie

%Vor%     
Louis Wasserman 04.11.2013, 18:02
quelle

Tags und Links