Tôi đang cố thêm các mục nhập vào một hàm có thể bắt đầu bằng Java bằng Eclipse. Trong quá trình đặt, chỉ một khóa được ghi đè bằng một khóa và giá trị mới. Số đếm của hashtable được duy trì đúng cách nhưng một trong các cặp (khóa, giá trị) bị mất.Java Hashtable ghi đè khóa hiện có bằng khóa mới trong khi 'đặt'
Đây là mẫu mã của tôi:
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);
}
}
Tôi đã sử dụng để inbuilt 'hashcode' và 'bằng' phương pháp trong nhật thực để so sánh các đối tượng lớp.
Input Text File:
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
Tại sao phím được xóa ở đó ngay lập tức cụ thể.?
[sửa] hashCode và equals: Tôi sử dụng Eclipse để tự động nhập những phương pháp // (x, y) là (a, b)
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;
}
}
gì hashCode của bạn và bằng làm gì? – Thilo
Lớp "Val" là gì? Nó giống như "K"? – dmeister
Vâng. lấy làm tiếc. Lớp Val là lớp K – SyncMaster