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;
}
HashMap 的值排序,自定义引用类型值排序
最新推荐文章于 2023-10-05 19:50:17 发布