我们知道 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。