2013-08-20 38 views
0

我是java新手。在使用TreeMap時,我想用key作爲兩個對象的集合,比較器也應該是這兩種類型的組合。更明確地說我想要的是:使用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和字符串,而不是讓他們分開,類似模板的東西。

感謝您的幫助.. !!

+0

您需要使用包裝類:'Comparator '和'Map '。 – arshajii

+0

您可以創建一個單獨的類,並在該類中具有「int」和「String」類型的字段。 –

回答

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 = ... 
+2

'Key implements Comparable '? –

+0

「關鍵」是可以在示例代碼中完成的最佳選擇。據推測,這兩種類型的組合有一些意義,並且應該是真實代碼中類標識符的基礎。 –

+0

Map table2 = new TreeMap (Key);這是正確的嗎?? – katherine

-1

您可以創建一個TreeMap<Object, Table>和使用Integer S(未int S)和String S作爲密鑰。只要確保使用一個比較器,在任何字符串之前始終對所有整數進行排序。

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); 
     } 
    }); 
相關問題