У меня есть отсортированная TreeMap на основе значений, и она напечатана, как показано ниже:
abortion-2
able-2
ab-2
aaron-2
aaa-2
aa-2
a-2
absent-1
absence-1
abraham-1
ability-1
aberdeen-1
abc-1
Но кажется, что слова с одинаковыми значениями печатаются в обратном порядке:
"аборт, способный, аб, аарон, ааа, аа, а" вместо "а, аа, ааа, аарон, аб, способный аборт " и так далее.
Я даже думал добавить каждый набор ключей, имеющих одинаковое значение, в TreeSet и распечатать его, но я не мог повторить его на основе следующих значений.
Вот компаратор, который я передаю в TreeMap. Может ли кто-нибудь помочь мне исправить код, чтобы напечатать его в правильном порядке?
public class MyComparator implements Comparator<String>{
Map<String, Integer> tiedMap;
public MyComparator(Map<String, Integer> map){
this.tiedMap = map;
}
public int compare(String a, String b){
if(tiedMap.get(a)>=tiedMap.get(b)){
return -1;
}
else
return 1;
}
}
И вот как я пытаюсь его напечатать:
Iterator it = tree.entrySet().iterator();
for(int i=0; i<n; i++){
if(it.hasNext()){
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(pairs.getKey()+"-"+pairs.getValue());
}
}
Изменить: я читаю ввод в TreeMap, а затем передаю его в другой TreeMap.
Изменить: код, который создает TreeMaps:
Map<String, Integer> map = new TreeMap<String, Integer>();
Words t = new Words();
MyComparator comp = w.(new MyComparator(map));
Map<String, Integer> tree = new TreeMap<String, Integer>(comp);
int size = Integer.parseInt(buffer.readLine());
for(int i = size; i>0; i--){
reader = buffer.readLine();
if(map.get(reader)!=null){
map.put(reader, map.get(reader)+1);
}
else
map.put(reader, 1);
}
tree.putAll(map);
TreeMaps
, пожалуйста? - person SimonC   schedule 31.01.2013TreeMap
не может иметь повторяющихся ключей (в вашем случае ключ - это то, что возвращает метод сравнения). - person dacwe   schedule 31.01.2013