将 <Object, Object> 放入 TreeMap 时出错
Error when putting <Object, Object> into TreeMap
我有以下两个 类,它们定义了我想放入 TreeMap 中的对象:
class GeneKey {
String PN;
int PW;
// Generator makes unique TreeMap key.
GeneKey(String a, int b){
this.PN = a;
this.PW = b;
}
}
然后是第二个对象:
class GeneValue {
String info;
String date;
// Generator makes TreeMap value
GeneValue(String a, String b){
this.info = a;
this.date = b;
}
}
然后我想制作一个 TreeMap:
import java.util.TreeMap;
// In main ...
TreeMap<GeneKey, GeneValue> samples = new TreeMap<GeneKey, GeneValue>();
String a = "test";
int b = 100;
String c = "test again";
String d = "test yet again";
// Try to put these objects into the tree map.
samples.put(new GeneKey(a, b) ,new GeneValue(c,d))
但我收到以下错误:
Exception in thread "main" java.lang.ClassCastException: GeneKey cannot be cast to java.lang.Comparable
我想知道为什么我无法建立 key:value 或 GeneKey:GeneValue 的 TreeMap,即使我在初始化 TreeMap 时指定了这些对象。如何初始化地图以便 .put() 这两个对象。
谢谢
TreeMap
是一个有序容器:当您请求它的键或条目时,您会按特定顺序获取它们。
顺序取决于您提供的密钥。为了让容器对键进行排序,每个键都需要实现 Comparable
接口:
class GeneKey implements Comparable<GeneKey> {
String PN;
int PW;
// Generator makes unique TreeMap key.
GeneKey(String a, int b){
this.PN = a;
this.PW = b;
}
public int compareTo(GenKey other) {
int res = PN.compareTo(other.PN);
return (res != 0) ? res : Integer.compare(PW, other.PW);
}
}
这不是基于散列的容器的要求,因为一切都继承自 Object
,它提供 hashCode
和 equals
。
我有以下两个 类,它们定义了我想放入 TreeMap 中的对象:
class GeneKey {
String PN;
int PW;
// Generator makes unique TreeMap key.
GeneKey(String a, int b){
this.PN = a;
this.PW = b;
}
}
然后是第二个对象:
class GeneValue {
String info;
String date;
// Generator makes TreeMap value
GeneValue(String a, String b){
this.info = a;
this.date = b;
}
}
然后我想制作一个 TreeMap:
import java.util.TreeMap;
// In main ...
TreeMap<GeneKey, GeneValue> samples = new TreeMap<GeneKey, GeneValue>();
String a = "test";
int b = 100;
String c = "test again";
String d = "test yet again";
// Try to put these objects into the tree map.
samples.put(new GeneKey(a, b) ,new GeneValue(c,d))
但我收到以下错误:
Exception in thread "main" java.lang.ClassCastException: GeneKey cannot be cast to java.lang.Comparable
我想知道为什么我无法建立 key:value 或 GeneKey:GeneValue 的 TreeMap,即使我在初始化 TreeMap 时指定了这些对象。如何初始化地图以便 .put() 这两个对象。
谢谢
TreeMap
是一个有序容器:当您请求它的键或条目时,您会按特定顺序获取它们。
顺序取决于您提供的密钥。为了让容器对键进行排序,每个键都需要实现 Comparable
接口:
class GeneKey implements Comparable<GeneKey> {
String PN;
int PW;
// Generator makes unique TreeMap key.
GeneKey(String a, int b){
this.PN = a;
this.PW = b;
}
public int compareTo(GenKey other) {
int res = PN.compareTo(other.PN);
return (res != 0) ? res : Integer.compare(PW, other.PW);
}
}
这不是基于散列的容器的要求,因为一切都继承自 Object
,它提供 hashCode
和 equals
。