के दौरान नई कुंजी के साथ मौजूदा कुंजी को ओवरराइट करता है मैं एक्लिप्स का उपयोग कर जावा में हैशटेबल में प्रविष्टियां जोड़ने की कोशिश कर रहा हूं। पुट ऑपरेशन के दौरान, कुंजी की केवल एक कुंजी एक नई कुंजी और मूल्य से अधिक हो जाती है। हैशटेबल की गिनती ठीक से रखी जाती है लेकिन (कुंजी, मूल्य) जोड़ी में से एक खो जाती है।जावा हैशटेबल 'put'
ArrayList<Double> list;
Hashtable<Val,ArrayList<Double>> numbers = new Hashtable<Val,ArrayList<Double>>();
while((line = brMyHashval.readLine()) != null)
{
if(!(line.isEmpty()))
{
String[] temp;
temp = line.split(" ");
eDouble = Double.parseDouble(temp[2].toString());
Val key = new Val(Double.parseDouble(temp[0].toString()) ,Double.parseDouble(temp[1].toString()));
if(!(numbers.containsKey(key)))
{
list = new ArrayList<Double>();
numbers.put(key, list);
}
else
{
list = numbers.get(key);
}
list.add(eDouble);
}
}
मैं इनबिल्ट 'hashCode' के लिए इस्तेमाल किया है और वर्ग की वस्तुओं की तुलना के लिए ग्रहण में विधि 'के बराबर है':
यहाँ मेरी नमूना कोड है।
इनपुट पाठ फ़ाइल:
1.0 2.0 9.0
3.0 4.0 9.0
5.0 6.0 9.0
1.0 2.0 8.0
5.0 6.0 8.0
1.0 2.0 7.0
**7.0 8.0 7.0** // After this point a new hash entry gets added for key(7,8), But key (1,2) get deleted from the hashtable, though count gets increased to 4.
3.0 4.0 7.0
5.0 6.0 10.0
1.0 2.0 10.0
1.0 3.0 10.0
1.0 4.0 10.0
क्यों महत्वपूर्ण यह है कि विशिष्ट पल में नष्ट कर दिया हो जाता है।?
[संपादित करें] hashCode और बराबर होती है: मैं ग्रहण का इस्तेमाल किया स्वचालित रूप से इन तरीकों // (एक्स, वाई) है (ए, बी)
class Val
{
double x;
double y;
Val(double X, double Y)
{
x = X;
y = Y;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
long temp;
temp = Double.doubleToLongBits(x);
result = prime * result + (int) (temp^(temp >>> 32));
temp = Double.doubleToLongBits(y);
result = prime * result + (int) (temp^(temp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Val other = (Val) obj;
if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x))
return false;
if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y))
return false;
return true;
}
}
क्या कर अपने hashCode करते हैं और बराबर:
अपने कोड के अंत में निम्नलिखित क्या HashMap में वास्तव में है देखने के लिए जोड़ सकता हूँ? – Thilo
"वैल" कक्षा क्या है? क्या यह "के" जैसा ही है? – dmeister
हाँ। माफ़ कीजिये। वैल क्लास कक्षा के – SyncMaster