HashMap 的值排序,自定义引用类型值排序

HashMap 的值排序,自定义引用类型值排序比较器中使用的compareTo()方法需要在自定义类中重新定义,如果底层使用HashCode排序,则要重新此方法。


public class MapTest {

    @Test
    public void MapTest1() {
        HashMap<String,Student> map=new  HashMap<>();
        map.put("st1", new Student(300,"张三",new Date()));
        map.put("st8", new Student(300,"张三",new Date()));
        map.put("st2", new Student(200,"李四",new Date()));
        map.put("st3", new Student(300,"赵五",new Date()));
        map.put("st4", new Student(300,"赵五",new Date()));
        map.put("st5", new Student(300,"赵五",new Date()));
        map.put("st6", new Student(300,"赵五",new Date()));
        map.put("st7", new Student(300,"赵五",new Date()));

        HashMap<String,String> map1=new  HashMap<>();
        map1.put("ZHANG", "bbbbbb");
        map1.put("JHUY", "aaaaaa");
        map1.put("LIYXF", "eeeee");
        map1.put("UUQADG", "cccccc");
        map1.put("VHDANE", "dddddd");


        for (Map.Entry<String, String> lmi: map1.entrySet()) {
            System.out.println(lmi);
        }
        //Demo1(map);
        ArrayList<Map.Entry<String, String>> list1=new ArrayList<Map.Entry<String, String>>(map1.entrySet());
        Collections.sort(list1, new Comparator<Entry<String,String>>() {

            @Override
            public int compare(Entry<String, String> o1, Entry<String, String> o2) {

                return o1.getValue().compareTo(o2.getValue());
            }
        });

        System.out.println("------------");

        for (Map.Entry<String, String> lii: list1) {
            System.out.println(lii);
        }





    }

    private void Demo1(HashMap<String, Student> map) {
        for (Map.Entry<String, Student> maps :map.entrySet()) {
            System.out.println(maps);
        }

        for (Map.Entry<String, Student> maps :map.entrySet()) {
            System.out.println(maps);
        }

        ArrayList<Map.Entry<String, Student>> list=new ArrayList(map.entrySet());
        //list.sort()
        Collections.sort(list, new Comparator<Map.Entry<String, Student>>(){

            @Override
            public int compare(Entry<String, Student> o1, Entry<String, Student> o2) {

                return o1.getValue().compareTo(o2.getValue());
            }

        });

        System.out.println("----------------------");
        for (Map.Entry<String, Student> ml :list) {
            System.out.println(ml);
        }
    }

}
/*************/

@Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", birthday=" + birthday + "]";
    }

    public int compareTo(Student v) {

        return this.hashCode()-v.hashCode();
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((birthday == null) ? 0 : birthday.hashCode());
        result = prime * result + (int) (id ^ (id >>> 32));
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值