【java】TreeSet的自然排序
2015-01-21 20:31
369 查看
package collection; /* * TreeSet的自然排序 * 向TreeSet类对象中添加自定义的类对象,会报错classCastException 类型转换异常 ,因为不能转换成 Comparabel的实现类。 * 步骤: * 1,自定义类实现Comparable接口 Person implements Comparable * 2,自定义类除了需要重写hashCode()和equals()方法外,还需要重写compareTo(Object obj)方法,在方法中自定义排序规则。 */ import java.util.Iterator; import java.util.Set; import java.util.TreeSet; import org.junit.Test; public class TestTreeSet { public static void main(String[] args) { } @Test public void test1() { Set ts = new TreeSet(); ts.add(new Person(1001, "张三", 23)); ts.add(new Person(1002, "李四", 24)); ts.add(new Person(1001, "王五", 24)); ts.add(new Person(1001, "aa", 24)); Iterator iterator = ts.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } } class Person implements Comparable {// 第一步:自定义类必须实现Comparable接口 private int id; private String name; private int age; public Person() { super(); } public Person(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } 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 "person [id=" + id + ", name=" + name + ", age=" + age + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + id; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (id != other.id) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } public int compareTo(Object obj) {// 第二步:重写compareTo()方法,自定义排序规则 Person p = (Person) obj; int result; result = id > p.id ? 1 : (id == p.id ? 0 : -1); if (result == 0) { result = age > p.age ? 1 : (age == p.age ? 0 : -1); if (result == 0) { result = name.compareTo(p.name); } } return result; } }
相关文章推荐
- Java_基础—TreeSet保证元素唯一和自然排序
- Java中的排序比较方式:自然排序和比较器排序
- TreeSet自然排序
- Java容器Treeset的两种排序方法
- JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习
- JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习
- Java中的排序比较方式:自然排序和比较器排序
- TreeSet集合添加自定义类的自然排序实例
- Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序)
- Java基础知识强化之集合框架笔记44:Set集合之TreeSet保证元素唯一性和自然排序的原理和图解
- JAVA比较器排序及对比自然排序
- 详细介绍TreeSet的自然和定制两种排序
- Java中的排序比较方式:自然排序和比较器排序
- 【java】TreeSet的定制排序
- Java基础知识强化之集合框架笔记46:Set集合之TreeSet存储自定义对象并遍历练习2(自然排序)
- java_TreeSet 定制排序实例
- Java中的集合排序(自然排序 & 定制排序)
- java-集合(6)-TreeSet,HashSet与TreeSet比较,HashMap,TreeMap只有在排序的功能时使用
- Java 往TreeSet集合中存储自定义对象学生,按照学生的年龄进行排序。
- JAVA自然排序(求赞)