मैंने देखा (और सराहना की है) कि गुवा के ImmutableMap.Builder
बिल्डर में डुप्लिकेट कुंजी जोड़े जाने पर विफल होने में विफल रहता है। फिर भी वही व्यवहार (डुप्लिकेट तत्व जोड़ना) ImmutableSet
के साथ सफल होता है।ImmutableSet डुप्लिकेट क्यों देता है, लेकिन ImmutableMap
क्या इस अंतर का कोई कारण है, और ImmutableSet
को एक ही विफलता व्यवहार के साथ बनाने का कोई अच्छा तरीका है?
टेस्ट मामला:
import static org.testng.Assert.*;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
public class ImmutableDuplicatesTest
{
@Test(expectedExceptions=IllegalArgumentException.class) // Note failure
public void mapDuplicates() {
ImmutableMap.Builder<String, String> map = ImmutableMap.builder();
map.put("a", "a");
map.put("b", "b");
map.put("a", "c");
assertEquals(map.build().size(), 2);
}
@Test // Passes normally
public void setDuplicates() {
ImmutableSet.Builder<String> set = ImmutableSet.builder();
set.add("a");
set.add("b");
set.add("a");
assertEquals(set.build().size(), 2);
}
}
कुछ मेरा अनुमान है कि हो सकता है, सेट तैयार कर रहे हैं कि आप इनपुट एक ही बात दो बार और केवल यह की एक प्रति हो सकता है। हालांकि, एक मानचित्र के साथ, यदि आप एक ही कुंजी को नए मान पर मैप करते हैं, तो यह पुराने को ओवरराइट करता है, और इसका उद्देश्य व्यवहार – Cruncher
नहीं हो सकता है, भले ही मान समान है या नहीं, कोई असर नहीं है, यह किसी भी डुप्लिकेट पर विफल रहता है कुंजी। – dimo414