0

我是java新手。在使用 TreeMap 时,我想将键用作两个对象的集合,并且比较器应该是这两种类型的组合。更清楚我想要的是:

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

谢谢您的帮助..!!

4

2 回答 2

3

当然。int用 a和 a创建一个关键类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 = ...
于 2013-08-20T15:25:01.170 回答
-1

您可以创建 aTreeMap<Object, Table>并使用Integers(不是ints)和Strings 作为键。只需确保您使用的比较器在任何字符串之前始终对所有整数进行排序。

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);
      }
    });
于 2013-08-20T15:27:10.170 回答