मान लें कि आपके पास कक्षा है और आप एक हैशसेट बनाते हैं जो इस कक्षा के इस उदाहरण को स्टोर कर सकता है। यदि आप समान उदाहरण जोड़ने की कोशिश करते हैं, तो संग्रह में केवल एक उदाहरण रखा जाता है, और यह ठीक है।जावा हैशसेट में डुप्लीकेट होते हैं यदि निहित तत्व संशोधित किया गया है
हालांकि यदि आपके पास हैशसेट में दो अलग-अलग उदाहरण हैं, और आप एक लेते हैं और इसे दूसरे की सटीक प्रति बनाते हैं (फ़ील्ड की प्रतिलिपि बनाकर), हैशसेट में दो डुप्लिकेट उदाहरण होंगे।
यहाँ कोड है जो इस दर्शाता है:
public static void main(String[] args)
{
HashSet<GraphEdge> set = new HashSet<>();
GraphEdge edge1 = new GraphEdge(1, "a");
GraphEdge edge2 = new GraphEdge(2, "b");
GraphEdge edge3 = new GraphEdge(3, "c");
set.add(edge1);
set.add(edge2);
set.add(edge3);
edge2.setId(1);
edge2.setName("a");
for(GraphEdge edge: set)
{
System.out.println(edge.toString());
}
if(edge2.equals(edge1))
{
System.out.println("Equals");
}
else
{
System.out.println("Not Equals");
}
}
public class GraphEdge
{
private int id;
private String name;
//Constructor ...
//Getters & Setters...
public int hashCode()
{
int hash = 7;
hash = 47 * hash + this.id;
hash = 47 * hash + Objects.hashCode(this.name);
return hash;
}
public boolean equals(Object o)
{
if(o == this)
{
return true;
}
if(o instanceof GraphEdge)
{
GraphEdge anotherGraphEdge = (GraphEdge) o;
if(anotherGraphEdge.getId() == this.id && anotherGraphEdge.getName().equals(this.name))
{
return true;
}
}
return false;
}
}
ऊपर कोड से उत्पादन:
1 a
1 a
3 c
Equals
वहाँ सामग्री को मान्य करने HashSet मजबूर करने के लिए एक रास्ता है ताकि संभव डुप्लिकेट प्रविष्टियों उपर्युक्त परिदृश्य में बनाया गया हटा दिया गया है?
एक नया समाधान हैशसेट बनाने के लिए एक संभावित समाधान हो सकता है और सामग्री को एक हैशसेट से दूसरे में कॉपी कर सकता है ताकि नए हैशसेट में डुप्लिकेट न हों, हालांकि मुझे यह समाधान पसंद नहीं है।
ठीक है तो उपरोक्त परिदृश्य अमान्य है। मुझे लगता है कि सामग्री को एक नए हैशसेट में कॉपी करना एकमात्र विकल्प है। –
@ Spi1988 सही समाधान 'सेट' के अनुबंध से चिपकना है और संग्रह में जोड़ने के बाद वस्तुओं को संशोधित नहीं करना है। – EJP
@PB_MLT सामग्री को नए हैशसेट में कॉपी करके आप क्या हासिल करेंगे? – HungryForKnowledge