कृपया यह समझने के लिए मेरे कोड को नीचे देखें कि क्या नक्शा में ऐरेलिस्ट है और कैसे JVM इनपुट के लिए यह करेगा: यहां मैं लिखता हूं हैशकोड और TesthashCodeEquals कक्षा के लिए विधि बराबर है।
package com.msq;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class TesthashCodeEquals {
private int a;
private int b;
public TesthashCodeEquals() {
// TODO Auto-generated constructor stub
}
public TesthashCodeEquals(int a, int b) {
super();
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public int hashCode() {
return this.a + this.b;
}
public boolean equals(Object o) {
if (o instanceof TesthashCodeEquals && o != null) {
TesthashCodeEquals c = (TesthashCodeEquals) o;
return ((this.a == c.a) && (this.b == c.b));
} else
return false;
}
}
public class HasCodeEquals {
public static void main(String[] args) {
Map<List<TesthashCodeEquals>, String> m = new HashMap<>();
List<TesthashCodeEquals> list1=new ArrayList<>();
list1.add(new TesthashCodeEquals(1, 2));
list1.add(new TesthashCodeEquals(3, 4));
List<TesthashCodeEquals> list2=new ArrayList<>();
list2.add(new TesthashCodeEquals(10, 20));
list2.add(new TesthashCodeEquals(30, 40));
List<TesthashCodeEquals> list3=new ArrayList<>();
list3.add(new TesthashCodeEquals(1, 2));
list3.add(new TesthashCodeEquals(3, 4));
m.put(list1, "List1");
m.put(list2, "List2");
m.put(list3, "List3");
for(Map.Entry<List<TesthashCodeEquals>,String> entry:m.entrySet()){
for(TesthashCodeEquals t:entry.getKey()){
System.out.print("value of a: "+t.getA()+", value of b: "+t.getB()+", map value is:"+entry.getValue());
System.out.println();
}
System.out.println("######################");
}
}
}
।
output:
value of a: 10, value of b: 20, map value is:List2
value of a: 30, value of b: 40, map value is:List2
######################
value of a: 1, value of b: 2, map value is:List3
value of a: 3, value of b: 4, map value is:List3
######################
तो यह सूची में वस्तुओं की संख्या और वस्तु में valriabe के मूल्यों की जाँच करेगा। यदि ऑब्जेक्ट्स की संख्या समान है और इंस्टेंस चर के मान भी समान हैं तो यह डुप्लिकेट कुंजी पर विचार करेगा और कुंजी को ओवरराइड करेगा।
अब अगर मैं सूची 3 पर वस्तु का केवल मान बदलने
list3.add
(नई TesthashCodeEquals (2, 2));
तो यह प्रिंट होगा:
output
value of a: 2, value of b: 2, map value is:List3
value of a: 3, value of b: 4, map value is:List3
######################
value of a: 10, value of b: 20, map value is:List2
value of a: 30, value of b: 40, map value is:List2
######################
value of a: 1, value of b: 2, map value is:List1
value of a: 3, value of b: 4, map value is:List1
######################
ताकि यह हमेशा सूची में वस्तुओं की संख्या और वस्तु की उदाहरण चर के मूल्य की जाँच करें।
धन्यवाद
मैं भी सेटर्स को छोड़ दूंगा और इसे अपरिवर्तनीय बना दूंगा। निर्माण के बाद उस वर्ग की वस्तुओं को बदलने का शायद कोई कारण नहीं है। –
+1 - वास्तव में, यह शायद ** ** स्थान बचाता है, क्योंकि बिग्राम क्लास में 32-बिट 'लंबाई' फ़ील्ड का ओवरहेड नहीं होगा। –