使用TreeMap Key作为两种不同类型的集合

时间:2013-08-20 15:22:59

标签: java collections treemap

我是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的集合,而不是将它们分开,类似于模板。

感谢您的帮助.. !!

2 个答案:

答案 0 :(得分:3)

不确定。从intString

中创建一个关键课程
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);
      }
    });