TreeSet方法之一 当向TreeSet中添加Person对象 续 确定按哪个属性排序

来源:互联网 发布:新百伦淘宝官方旗舰店 编辑:程序博客网 时间:2024/06/07 08:30
package andycpp;public class Person implements Comparable {private String name;private Integer age;//get set 方法public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}//无参构造器public Person() {super();}//带参构造器public Person(String name, Integer age) {super();this.name = name;this.age = age;}//toString@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((age == null) ? 0 : age.hashCode());result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic 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 == null) {if (other.age != null)return false;} else if (!age.equals(other.age))return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}//重写了未实现的抽象方法,方法实现了什么功能:就是你希望按照哪个属性来排列//当向TreeSet中添加Person类的对象时,依据此方法,确定按照哪个属性排列//Person有两个属性name,age,这里按照age 排序@Overridepublic int compareTo(Object o) {if(o instanceof Person){ //保证是Person类型的Person p = (Person)o;//return this.name.compareTo(p.name);//name已经重写了compareTo//return this.age.compareTo(p.age);//从小到大return -this.age.compareTo(p.age);//从大到小} return 0; //如果不是这个类型,就返回0,}}



package andycpp;import java.util.Iterator;import java.util.Set;import java.util.TreeSet;import org.junit.Test;/** * Collection接口: * List接口 * ArrayList(主要的实现类) * LinkedList(对于频繁的插入删除操作) * Vector(古老的实现类,线程安全,但效率要低于ArrayList) * Set接口存储无序,不可重复的元素.Set中常用的方法都是Collection下定义的。 * HashSet(主要实现类) * LinkedHashSet * TreeSet * */public class TestSet {/* * TreeSet: * 1,向TreeSet中添加的元素必须是同一个类的。类型相同 * 2,可以按照添加进集合中的元素的指定的顺序遍历。像String,包装类等默认按照从小到大的顺序遍历。 * 3,当向TreeSet中添加自定义类的对象时,有两种排序方法: 自然排序和定制排序 * 4,自然排序:要求自定义类实现java.lang.Comparable接口并重写其compareTo(Object obj)方法 * 在此方法中,指明按照自定义类的哪个属性进行排序。 *  *  */@Testpublic void testTreeSet1(){Set set = new TreeSet();/* *  当Person类没有实现Comparable接口时,当向TreeSet中添加Person对象时,报ClassCastException错误 *   * */set.add(new Person("CC",23));set.add(new Person("MM",21));set.add(new Person("GG",25));set.add(new Person("JJ",24));set.add(new Person("DD",20));for(Object str :set){System.out.println(str);}}}

输出

Person [name=GG, age=25]
Person [name=JJ, age=24]
Person [name=CC, age=23]
Person [name=MM, age=21]
Person [name=DD, age=20]



0 0
原创粉丝点击