Java 对树形图条目进行排序
我有一个树状图和一个关键竞争对手的作品:Java 对树形图条目进行排序,java,collections,comparator,Java,Collections,Comparator,我有一个树状图和一个关键竞争对手的作品: Map<String, Long> movieReviewsTreeMap = new TreeMap<String, Long>(new MyComperator()); class MyComperator implements Comparator<String>{ @Override public int compare(String s1, String s2) { retu
Map<String, Long> movieReviewsTreeMap = new TreeMap<String, Long>(new MyComperator());
class MyComperator implements Comparator<String>{
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
}
Map movieReviewsTreeMap=newtreemap(new MyComperator());
类MyComperator实现比较器{
@凌驾
公共整数比较(字符串s1、字符串s2){
返回s1.compareTo(s2);
}
}
我试图修改Comparator以比较TreeMap条目。
我的目标是按值(从高到低)和键(如果两个值相等)对树映射进行排序
谢谢。您只能在
java.util.TreeMap
中对键进行排序,但您可以扩展它并覆盖使用comparator实现某些附加逻辑的方法 你也可以尝试一些类似的方法来满足你的要求
import java.util.*;
import java.util.Map.Entry;
public class TestCollection13{
public static void main(String args[]){
Map<MyComperator, Long> movieReviewsTreeMap = new TreeMap<MyComperator, Long>(new MyComperator());
Long l1 = new Long(5);
movieReviewsTreeMap.put(new MyComperator("a", l1),l1);
Long l2 = new Long(2);
movieReviewsTreeMap.put(new MyComperator("a", l2),l2);
Long l3 = new Long(6);
movieReviewsTreeMap.put(new MyComperator("a", l3),l3);
Long l4 = new Long(0);
movieReviewsTreeMap.put(new MyComperator("a", l4),l4);
for(Entry<MyComperator, Long> entry : movieReviewsTreeMap.entrySet()){
System.out.println("Key : " + entry.getKey().getKey() + " , value :" + entry.getValue());
}
}
}
class MyComperator implements Comparator<MyComperator>{
String key;
Long value;
MyComperator(){
}
MyComperator(String key, Long value){
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Long getValue() {
return value;
}
public void setValue(Long value) {
this.value = value;
}
@Override
public int hashCode() {
return this.key.length();
}
@Override
public boolean equals(Object obj) {
MyComperator mc = (MyComperator)obj;
if(mc.getKey().equals(this.getKey()) && mc.getValue().equals(this.getValue())){
return false;
}
// TODO Auto-generated method stub
return super.equals(obj);
}
@Override
public int compare(MyComperator o1, MyComperator o2) {
if(o1.getKey().equals(o2.getKey())){
return o1.getValue().compareTo(o2.getValue());
}
return 0;
}
}
树映射按定义按键排序,这就是java中树映射的工作方式(也是比较器只看到键的原因)。如果您想按不属于键的内容(即值)进行排序,则需要将其提取到另一个结构中并在那里进行排序。
Key : a , value :0
Key : a , value :2
Key : a , value :5
Key : a , value :6