Java中HashMap中对value对象进行排序

来源:互联网 发布:网络推手汇航 编辑:程序博客网 时间:2024/06/05 02:06

        我们知道HashMap有key值与value值,在某些时候我们Java中有些业务需要对HashMap的value进行排序,当你的value是一个对象;而你需要按照对象的某一个属性对HashMap进行排序时候,我们不得不进行相关操作,所以我写了一个小例子,解决这种问题,这也是我工作中遇到的问题。下面从代码解说:

一、创建一个对象必须继承Comparable

package cn.gdin.test;


public class CaptureBean implements Comparable<CaptureBean>{
    private String url;
    private long dt;


    public String getUrl() {
        return url;
    }


    public void setUrl(String url) {
        this.url = url;
    }


    public long getDt() {
        return dt;
    }


    public void setDt(long dt) {
        this.dt = dt;
    }


    @Override
    public int compareTo(CaptureBean another) {
        return (int) (this.dt-another.dt);            //对于你要比较的属性值进行对比,请注意返回负值与正值的含义。
    }
}

二、主工程例子

package cn.gdin.test;


import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;


public class Test {


private static Map<Integer, CaptureBean> mCaptureUrlsO2O = new HashMap<Integer, CaptureBean>();//实例一个对象
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建三个要排序的对象
CaptureBean o1 = new CaptureBean();
o1.setDt(100004);
o1.setUrl("o1");
CaptureBean o2 = new CaptureBean();
o2.setDt(100002);
o2.setUrl("o2");
CaptureBean o3 = new CaptureBean();
o3.setDt(100003);
o3.setUrl("o3");

mCaptureUrlsO2O.put(1, o1);
mCaptureUrlsO2O.put(2, o2);
mCaptureUrlsO2O.put(3, o3);

Collection<CaptureBean> values=mCaptureUrlsO2O.values();
                 List<CaptureBean> list=new ArrayList<CaptureBean>(values);
                Collections.sort(list);//对列表进行排序


                Iterator iterator = mCaptureUrlsO2O.keySet().iterator();
                  System.out.println("change before");
                 while (iterator.hasNext()) {//输出原来的排序
        System.out.println( mCaptureUrlsO2O.get(iterator.next()).getUrl());
        }
        
        Iterator iteratorAfter = mCaptureUrlsO2O.keySet().iterator();
        int j=0;
        System.out.println("change after");
        while (iteratorAfter.hasNext()) {
        int k =(Integer) iteratorAfter.next();
             mCaptureUrlsO2O.put(k,list.get(j) );//替换原来的排序
             System.out.println( mCaptureUrlsO2O.get(k).getUrl());
             j++;
        }
      
}


}

      

三、控制台输出结果:

change before
o1
o2
o3
change after
o2
o3
o1

四、总结

          对于里面的集合类的运用不多说,这里只是提供方案,关于知识点需要自己归纳!希望对你有所帮助,也许这不是最佳方案,谢谢!

0 0
原创粉丝点击