gpt4 book ai didi

java - 打印排序的树状图(根据值排序)

转载 作者:太空宇宙 更新时间:2023-11-04 07:50:11 25 4
gpt4 key购买 nike

我有一个基于值排序的 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

但似乎具有相同值的单词正在以相反的排序顺序打印:

“abortion,able,ab,aaron,aaa,aa,a”而不是“a,aa,aaa,aaron,ab,able abortion”等等。

我什至想过将每组具有相同值的键添加到 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。

编辑:创建 TreeMap 的代码:

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);

最佳答案

您的比较器将返回仅根据其值按相反顺序排序的条目。这是你想要的吗?

此外,如果您希望条目的顺序更可预测,您还应该比较键:

public int compare(String a, String b)
{
Integer aVal = tiedMap.get(a);
Integer bVal = tiedMap.get(b);

if (aVal > bVal)
{
return 1; // or -1 for descending order
}
else if (aVal < bVal)
{
return -1; // or 1 for descending order
}
else
{
// if values are equivalent compare on key as well
return a.compareTo(b);
// or for descending order:
// return b.compareTo(a);
}
}

关于java - 打印排序的树状图(根据值排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14619833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com