![](/img/trans.png)
[英]StackOverflowError when overriding Hashtable.contains() java
[英]Java Hashtable.contains() error
我正在使用x64的最新版本的Java。
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)
我發現哈希表具有不良行為。 這是一個簡短的代碼示例:
public class Test {
public static void main(String[] args) {
Hashtable<MyObject, MyObject> table =
new Hashtable<MyObject, MyObject>();
MyObject myObj = new MyObject();
System.out.println(myObj.hashCode());
System.out.println(myObj.equals(myObj));
if (!table.contains(myObj)) {
System.out.println("OK");
table.put(myObj, myObj);
}
if (!table.contains(myObj)) {
System.out.println("ERROR");
System.out.println(table);
}
}
}
這是輸出:
1500
true
OK
ERROR
{"myObject"="myObject"}
任何線索如何表現出來? 有人可以指出問題嗎? 順便說一句,當我使用HashSet()進行相同操作時,不會得到不想要的效果。
Hashtable可以正常工作,但是不希望被Java 1.2(1998)中的HashMap取代。我建議除非必要,否則不要使用它。
public static void main(String... args) {
Hashtable<MyObject, MyObject> table =
new Hashtable<MyObject, MyObject>();
MyObject myObj = new MyObject();
System.out.println(myObj.hashCode());
System.out.println(myObj.equals(myObj));
if (!table.contains(myObj)) {
System.out.println("OK");
table.put(myObj, myObj);
}
if (!table.contains(myObj)) {
System.out.println("ERROR");
System.out.println(table);
}
}
static class MyObject { }
版畫
1584673689
true
OK
但是更好的解決方案是使用像HashMap這樣的Map。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.