2015-06-02 21 views
-2

我想創建一個HashMap使用字符串作爲鍵和樹集使用自定義比較器(CandidateComparator)作爲值排序。如何初始化TreeSet作爲值的HashMap?

HashMap<String, TreeSet<Candidate>> map = new HashMap<String, TreeSet<Candidate>(new CandidateComparator())>(); 

我看不出我做錯了什麼。我使用這個網站:

http://www.java2novice.com/java-collections-and-util/treeset/sort-by-objects/

作爲參考。

這種說法得到兩個語法錯誤:

1.插入 '>' 完成ReferenceType1;

2.預計此令牌後「(」表達 - 指的是最後一個「(」聲明的

我在做什麼錯

+3

每個'TreeSet'值將有自己的'Comparator'。沒有辦法強制所有的值都以同樣的方式初始化。只是'new HashMap >()'。 –

+0

右側的TreeSet只是一個類型,您無法將參數傳遞給它。 –

回答

0

HashMap中應該初始化這樣? :

HashMap<String, TreeSet<Candidate>> map = new HashMap<String, TreeSet<Candidate>>(); 

無需比較的HashMap的本身你需要的TreeSet實例來填充HashMap,和他們每個人將REQ。使用比較器。

Comparator<Candidate> cmp = new CandidateComparator(); 
TreeSet<Candidate> ts1 = new TreeSet<Candidate>(cmp); 
... populate ts1 ... 
map.put ("someKey1", ts1); 
TreeSet<Candidate> ts2 = new TreeSet<Candidate>(cmp); 
... populate ts2 ... 
map.put ("someKey2", ts2);  
0

ComparatorTreeSet,而不是HashMap。此外,Comparator不是TreeSet類型定義的一部分(因爲它是例如TreeSet<Candidate>) - 只有在創建新實例時纔會通過。

所以,做一個長話短說 - 自定義刪除它,並通過它,當你構造一個對象:

Map<String, TreeSet<Candidate>> map = new HashMap<String, TreeSet<Candidate>>(); 

map.put ("SomeString", new TreeSet<Candidate>(new CandidateComparator()));