新手求助,Comparable如何实现有序映射中的键的排序?

想吃猫的小丑鱼 2019-03-25 02:53:13
JAVA初学新手一枚~
目前学到了Comparable和Comparator比较器这里,教学文档里有一句话不是很理解。

Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法
被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现
此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中
的键
或有序集合中的元素,无需指定比较器。

就是这里,该怎么通过Comparable实现一下这个用有序映射的键的排序呢?
我试了几个,如 LinkedHashMap<> map = new LinkedHashMap<>(),直接放在Collections.sort(map.entrySet);

或者用集合 ArrayList<> list = newArrayList<>(map.entrySet) ;

都不可以,
目前我只学了这两个可以将映射看作是有序的东西,不知道是不是有其他实现有序映射的方法,可以用Comparable实现一下上文所说的自然排序。

谢谢大家!
...全文
85 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qps2009 2019-03-25
  • 打赏
  • 举报
回复
按照键排序吗?不知道是不是我理解的这样
import java.util.*;

public class Test implements Runnable {
    private int id;
    private Object obj;
    public Test(int id,Object obj){
        this.id=id;
        this.obj=obj;
    }

    @Override
    public void run() {
        synchronized(obj){
            for(int i=0;i<10;i++){
                System.out.println("Thread id : "+id+" run "+i);
            }
        }
    }
    public static void main(String[] args){
        LinkedHashMap<String,Object>  map = new LinkedHashMap<>();
        map.put("2","44");
        map.put("1","12");
        map.put("14","331");
        map.put("5","245");
        map.put("0","11");
        ArrayList<Map.Entry<String,Object>> list = new ArrayList<>(map.entrySet()) ;
        System.out.println(list.toString());
        Collections.sort(list,(Map.Entry<String,Object> o1, Map.Entry<String,Object> o2)->{
            Integer j1=Integer.parseInt(o1.getKey());
            Integer j2=Integer.parseInt(o2.getKey());//按照键排升序
            //Integer j1=Integer.parseInt(o1.getValue().toString());
            //Integer j2=Integer.parseInt(o2.getValue().toString());//按照值排升序
            return j1-j2;
        });
        System.out.println(list.toString());
    }
}

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧