乐趣区

笔试题之Comparable

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

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

[Java] 纯文本查看 复制代码
?

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);            // 对于你要比较的属性值进行对比,请注意返回负值与正值的含义。}

}

 二、主工程例子

[Java] 纯文本查看 复制代码
?

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++;
    }
   

}

}

  

三、控制台输出结果:

[Java] 纯文本查看 复制代码
change before
o1
o2
o3
change after
o2
o3
o1

 四、总结

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

——本文转载自 CSDN。

退出移动版