TreeMap与通用密钥类型

时间:2016-02-28 08:56:15

标签: java treemap

我使用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

3 个答案:

答案 0 :(得分:1)

两者的超类型都是数字,所以你可以使用这个

答案 1 :(得分:0)

您随时可以使用ReferenceType运算符检查instanceof并相应地工作:

if (obj instanceof Long) { ... }
if (obj instanceof Integer) { ... }

来自JLS

  

RelationalExpression instanceof ReferenceType

     

在运行时,如果instanceof的值不是RelationalExpression,则null运算符的结果为true,并且可以将引用(第15.16节)转换为{ReferenceType 1}}没有提出ClassCastException。否则结果为false

答案 2 :(得分:0)

听起来你可能想要像

这样的东西
public class MyClass<T extends Number> {
  public TreeMap<T, String> myClass(String fileToRead) {
  ...
}

BigInteger也会填写Number帐单。

但是为了避免泛型的复杂化,我实际上建议始终使用Long作为键类型甚至BigInteger,除非您有强烈的要求不这样做。根据您使用的JVM(64位),Integer对象可能甚至不会使用比Long对象更少的空间。