JavaSE-TreeSet练习
2016-01-27 12:38
381 查看
package com.btp.t4; import java.util.Comparator; import java.util.TreeSet; import org.junit.Test; public class TestEmployee { //自然排序:使Employee实现comparable接口,并按name排序 @Test public void test1(){ Employee e1=new Employee("Kobe",37,new MyDate(4,12,1983)); Employee e2=new Employee("Lebulang",30,new MyDate(8,2,19782)); Employee e3=new Employee("Wade",17,new MyDate(3,1,1979)); Employee e4=new Employee("James",27,new MyDate(2,1,1975)); Employee e5=new Employee("Joradan",77,new MyDate(7,7,1933)); Employee e6=new Employee("Joradan",76,new MyDate(6,7,1933)); TreeSet set=new TreeSet(); set.add(e1);//不实现cpmparable接口一个也不进去 set.add(e2); set.add(e3); set.add(e4); set.add(e5); set.add(e6);//进不去 for(Object o:set){ System.out.println(o); } } //定制排序:创建TreeSet时传入Comparator对象,按生日的先后排序 @Test public void test2(){ Comparator com=new Comparator(){ @Override public int compare(Object o1, Object o2) { if(o1 instanceof Employee && o2 instanceof Employee){ Employee e1=(Employee)o1; Employee e2=(Employee)o2; MyDate birth1=e1.getBirthday(); MyDate birth2=e2.getBirthday(); if(birth1.getYear()!=birth2.getYear()){ return birth1.getYear()-birth2.getYear(); }else{ if(birth1.getMonth()!=birth2.getMonth()){ return birth1.getMonth()-birth2.getMonth(); }else{ return birth1.getDay()-birth2.getDay(); } } } return 0; } }; TreeSet set=new TreeSet(com); Employee e1=new Employee("Kobe",37,new MyDate(4,12,1983)); Employee e2=new Employee("Lebulang",30,new MyDate(8,2,1983)); Employee e3=new Employee("Wade",17,new MyDate(3,2,1983)); Employee e4=new Employee("James",27,new MyDate(2,1,1975)); Employee e5=new Employee("Joradan",77,new MyDate(7,7,1933)); Employee e6=new Employee("Joradan",76,new MyDate(7,7,1933));//生日相同进不去 set.add(e1); set.add(e2); set.add(e3); set.add(e4); set.add(e5); set.add(e6);//进不去 for(Object o:set){ System.out.println(o); } } } class Employee implements Comparable{ private String name; private Integer age; private MyDate birthday; 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 MyDate getBirthday() { return birthday; } public void setBirthday(MyDate birthday) { this.birthday = birthday; } public Employee(String name, Integer age, MyDate birthday) { super(); this.name = name; this.age = age; this.birthday = birthday; } public Employee() { super(); // TODO 自动生成的构造函数存根 } @Override public String toString() { return "Employee [name=" + name + ", age=" + age + ", birthday=" + birthday + "]"; } //重写的comparaTo方法 @Override public int compareTo(Object o) { if(o instanceof Employee){ Employee p=(Employee)o; return this.name.compareTo(p.name); } return 0; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((age == null) ? 0 : age.hashCode()); result = prime * result + ((birthday == null) ? 0 : birthday.hashCode()); 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; Employee other = (Employee) obj; if (age == null) { if (other.age != null) return false; } else if (!age.equals(other.age)) return false; if (birthday == null) { if (other.birthday != null) return false; } else if (!birthday.equals(other.birthday)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } class MyDate{ private int year; private int month; private int day; public int getYear() { return year; } public void setYear(int year) { this.year = year; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } public MyDate(int day,int month,int year) { super(); this.year = year; this.month = month; this.day = day; } public MyDate() { super(); // TODO 自动生成的构造函数存根 } @Override public String toString() { return "MyDate [year=" + year + ", month=" + month + ", day=" + day + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + day; result = prime * result + month; result = prime * result + year; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; MyDate other = (MyDate) obj; if (day != other.day) return false; if (month != other.month) return false; if (year != other.year) return false; return true; } }
相关文章推荐
- JavaSE-集合Set
- Struts2之文件下载
- Java集合框架指treemap
- Struts2+Spring+Hibernate step by step 03 整合Spring之中的一个(在DAO层验证username和password)
- Restlet+Fastjson 高速构建轻量级 Java RESTful Webservice
- eclipse使用git导入项目报“Couldn't create temporary repository”
- Java的日期格式化常用方法
- JAVA基础笔记之Number类
- java数学函数Math类中常用的方法
- java.lang.OutOfMemoryError异常解决方法
- java线程池(获取亚马逊商品页面数据)
- java生成随机数字和字母组合(自定义长度)
- Spring AOP 切面编程的方法
- 深入理解Java:SimpleDateFormat安全的时间格式化
- Java HashMap工作原理及实现
- java 单例
- Eclipse插件开发3-SWT基础
- Eclipse 在开发中使用到的快捷键很实用噢(转载)
- java synchronized详解
- RSA密钥,JAVA与.NET,IOS之间转换