TreeMap中如何实现自定义类key值的排序
2015-11-03 04:17
501 查看
在TreeMap中,如果key值是java中的基本类型,TreeMap会自身帮我们排序,如果是自定义类型,如定义一个Student类作为key值,我们如果不告知排序规则的话,运行就会报错。所以,如何实现自定义排序呢?解决方案有2个,二者选一即可:
在Student类中实现Comparable,重写compareTo方法
在构造函数中new Comparator,匿名内部类,重写compare 方法
代码如下:
在Student类中实现Comparable,重写compareTo方法
在构造函数中new Comparator,匿名内部类,重写compare 方法
代码如下:
public class Student implements Comparable<Student>{ private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Student o) { int num1 = this.getAge()-o.getAge(); int num2 = num1==0?this.getName().compareTo(o.getName()):num1; return num2; }
public class TestTreeMap { public static void main(String[] args) { //1.创建集合 TreeMap<Student, String> map = new TreeMap<Student, String>(new Comparator<Student>() { //按照年龄来排序,年龄相同按照姓名来排序 @Override public int compare(Student o1, Student o2) { if(o1.getAge()==o2.getAge()){ return o1.getName().compareTo(o2.getName()); } return o1.getAge()-o2.getAge(); } //2.创建学生对象并往集合中增加 Student s1 = new Student("张三",27); Student s2 = new Student("李四",29); Student s3 = new Student("王五",16); Student s4 = new Student("张三",27); map.put(s1, "2001"); map.put(s2, "2002"); map.put(s3, "2003"); map.put(s4, "2004"); //3.遍历集合 ,排序完成 Set<Student> set = map.keySet(); for(Student student : set){ String value = map.get(student); System.out.println(student.getName()+"=="+student.getAge()+"=="+value); } } }
相关文章推荐
- 在命令行用 sort 进行排序
- 文件遍历排序函数
- C#选择排序法实例分析
- C#插入法排序算法实例分析
- C#实现Datatable排序的方法
- SQLSERVER的排序问题结果不是想要的
- Windows Powershell排序和分组管道结果
- C#通过IComparable实现ListT.sort()排序
- C#选择法排序实例分析
- SQL学习笔记四 聚合函数、排序方法
- C#对list列表进行随机排序的方法
- 一根网线内的8根线哪4根是传输数据的,哪四根是防干扰的
- C#折半插入排序算法实现方法
- SQL进行排序、分组、统计的10个新技巧分享
- C++实现位图排序实例
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- SQL行号排序和分页(SQL查询中插入行号 自定义分页的另类实现)
- PHP下对数组进行排序的函数
- PHP数组排序之sort、asort与ksort用法实例