具有通用键类型的 TreeMap
TreeMap with generic key types
我正在使用 TreeMap 添加 <Integer,Long>
类型的条目。但是,我可能会遇到条目类型为 <Long, Long>
的情况,我想构建一个可以处理这两种情况的 TreeMap。到目前为止,我有
public class myClass {
public TreeMap<Integer, String> myClass(String fileToRead) {
....
TreeMap<Integer, String> map = new TreeMap<>();
map.put(Integer, String); //this is a for loop that iterates through input list
}
return map
}
如何添加可以是 Integer 或 Long 的通用密钥 K?
编辑:我想包括其他类型,例如 BigInteger
您始终可以使用 instanceof
运算符检查 ReferenceType
并相应地工作:
if (obj instanceof Long) { ... }
if (obj instanceof Integer) { ... }
来自JLS:
RelationalExpression instanceof
ReferenceType
At run time, the result of the instanceof
operator is true if the value of the RelationalExpression
is not null
and the reference could be cast (§15.16) to the ReferenceType
without raising a ClassCastException
. Otherwise the result is false
.
两者的超类型都是 Number,所以你可以使用这个
听起来你可能想要这样的东西
public class MyClass<T extends Number> {
public TreeMap<T, String> myClass(String fileToRead) {
...
}
BigInteger
也会填满 Number
账单。
但为了避免泛型的复杂化,我实际上建议始终使用 Long
作为键类型,甚至 BigInteger
,除非您有强烈的要求不要这样做。根据您使用的 JVM(64 位),Integer
对象使用的 space 甚至可能不会少于 Long
对象。
我正在使用 TreeMap 添加 <Integer,Long>
类型的条目。但是,我可能会遇到条目类型为 <Long, Long>
的情况,我想构建一个可以处理这两种情况的 TreeMap。到目前为止,我有
public class myClass {
public TreeMap<Integer, String> myClass(String fileToRead) {
....
TreeMap<Integer, String> map = new TreeMap<>();
map.put(Integer, String); //this is a for loop that iterates through input list
}
return map
}
如何添加可以是 Integer 或 Long 的通用密钥 K?
编辑:我想包括其他类型,例如 BigInteger
您始终可以使用 instanceof
运算符检查 ReferenceType
并相应地工作:
if (obj instanceof Long) { ... }
if (obj instanceof Integer) { ... }
来自JLS:
RelationalExpression
instanceof
ReferenceTypeAt run time, the result of the
instanceof
operator is true if the value of theRelationalExpression
is notnull
and the reference could be cast (§15.16) to theReferenceType
without raising aClassCastException
. Otherwise the result isfalse
.
两者的超类型都是 Number,所以你可以使用这个
听起来你可能想要这样的东西
public class MyClass<T extends Number> {
public TreeMap<T, String> myClass(String fileToRead) {
...
}
BigInteger
也会填满 Number
账单。
但为了避免泛型的复杂化,我实际上建议始终使用 Long
作为键类型,甚至 BigInteger
,除非您有强烈的要求不要这样做。根据您使用的 JVM(64 位),Integer
对象使用的 space 甚至可能不会少于 Long
对象。