本帖最后由 郑委员 于 2019-5-26 17:58 编辑
【上海校区】Java笔试题之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。
|