我是java的新手。在使用TreeMap时,我想使用key作为两个对象的集合,并且比较器应该是这两种类型的组合。更清楚我想要的是:
Comparator<int> in = (in1,in2)-> {
return in1.compareTo(in2);
}
Comparator<String> str = (str1,str22)-> {
return str1.compareTo(str22);
}
Map<int , Table > table1 = new TreeMap<int,Table>(in);
Map<String , Table > table2 = new TreeMap<str,Table>(str);
有没有办法可以将密钥用作int和string的集合,而不是将它们分开,类似于模板。
感谢您的帮助.. !!
答案 0 :(得分:3)
不确定。从int
和String
:
class Key implements Comparable<Key> {
private final int i;
private final String str;
public Key(int i, String str) {...}
public int compareTo(Key key) {...}
}
TreeMap<Key, Table> map = ...
答案 1 :(得分:-1)
您可以创建TreeMap<Object, Table>
并使用Integer
s(非int
s)和String
作为键。只需确保使用比较器,在任何字符串之前始终对所有整数进行排序。
SortedMap<Object, Table> mixedKeyMap = new TreeMap<Object, Table>(
new Comparator() {
public int compare(Object a, Object b) {
if (a instanceof Integer) {
if (b instanceof Integer) {
return ((Integer) a).compareTo((Integer) b);
} else {
assert b instanceof String;
return -1;
}
}
assert a instanceof String;
if (b instanceof Integer) {
return 1;
}
return ((String) a).compareTo((String) b);
}
});