【小程序】用策略模式完成自定义类的排序(改进版)
来源:互联网 发布:百度新闻 是算法搜索 编辑:程序博客网 时间:2024/06/06 08:58
Person类
public class Person{ private int id; private String name; private int age; public Person(int id,String name,int age){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;}@Overridepublic 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;}@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 != 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;}@Overridepublic String toString(){return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";} }
策略的公共接口
import java.util.List;public interface PersonSort{ public void sort(List<Person> list); }
策略类
1.按ID升序排序
import java.util.Collections;import java.util.Comparator;import java.util.List;public class IdUpsort implements PersonSort,Comparator<Person>{@Overridepublic void sort(List<Person> list){Collections.sort(list,this);}public int compare(Person o1, Person o2) {return o1.getId()-o2.getId();}}
按ID降序排序
import java.util.Collections;import java.util.Comparator;import java.util.List;public class IdDnsort implements Comparator<Person>, PersonSort{@Overridepublic void sort(List<Person> list){Collections.sort(list,this);}public int compare(Person o1, Person o2) {return o2.getId()-o1.getId();}}
2.按年龄升序排序
import java.util.Collections;import java.util.Comparator;import java.util.List;public class AgeUpsort implements PersonSort,Comparator<Person>{@Overridepublic void sort(List<Person> list){Collections.sort(list,this);}@Overridepublic int compare(Person o1, Person o2){ int result = o1.getAge()-o2.getAge(); if(result==0) { return o1.getId()-o2.getId(); } return result;}}
按年龄降序排序
import java.util.Collections;import java.util.Comparator;import java.util.List;public class AgeDnsort implements Comparator<Person>, PersonSort{@Overridepublic void sort(List<Person> list){ Collections.sort(list,this);}@Overridepublic int compare(Person o1,Person o2){ int result = o2.getAge()-o1.getAge(); if(result==0) { return o1.getId()-o2.getId(); } return result;}}
3.按名字升序排序
import java.util.Collections;import java.util.Comparator;import java.util.List;public class NameUpsort implements PersonSort,Comparator<Person>{ @Override public void sort(List<Person> list) { Collections.sort(list,this); } @Override public int compare(Person o1, Person o2) { int result = o1.getName().compareTo(o2.getName()); if(result==0) { return o1.getId()-o2.getId(); } return result; }}
按名字降序排序
import java.util.Collections;import java.util.Comparator;import java.util.List;public class NameDnsort implements PersonSort, Comparator<Person>{ @Override public void sort(List<Person> list) { Collections.sort(list,this); } @Override public int compare(Person o1, Person o2) { int result = o2.getName().compareTo(o1.getName()); if(result==0) { return o1.getId()-o2.getId(); } return result; }}
封装策略类的环境类
import java.util.List;public class Environment{ private PersonSort personsort; public Environment(PersonSort personsort) { this.personsort = personsort; } public PersonSort getPersonsort() { return personsort; } public void setPersonsort(PersonSort personsort) { this.personsort = personsort; } public void sort(List<Person> list) { personsort.sort(list); }}
测试类
import java.util.ArrayList;import java.util.List;public class StrategyTest{public static void main(String[] args){ Person p1 = new Person(201001,"zhangsan",24); Person p2 = new Person(201004,"lisi",19); Person p3 = new Person(201003,"zhangsan",25); Person p4 = new Person(201002,"zhaoliu",27); Person p5 = new Person(201006,"lisi",24); Person p6 = new Person(201005,"kuroro",24); List<Person> list = new ArrayList<Person>(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); list.add(p5); list.add(p6); System.out.println("排序前状态:"); System.out.println(list); System.out.println("-----------------------"); Environment en = new Environment(new IdUpsort()); en.sort(list); System.out.println("按ID正序排列:"); System.out.println(list); en.setPersonsort(new IdDnsort()); en.sort(list); System.out.println("按ID逆序排列:"); System.out.println(list); System.out.println("-----------------------"); en.setPersonsort(new AgeUpsort()); en.sort(list); System.out.println("按年龄正序排列:"); System.out.println(list); en.setPersonsort(new AgeDnsort()); en.sort(list); System.out.println("按年龄逆序排列:"); System.out.println(list); System.out.println("-----------------------"); en.setPersonsort(new NameUpsort()); en.sort(list); System.out.println("按名字正序排列:"); System.out.println(list); en.setPersonsort(new NameDnsort()); en.sort(list); System.out.println("按名字逆序排列:"); System.out.println(list); } }
打印结果
排序前状态:
[Person [id=201001, name=zhangsan, age=24], Person [id=201004, name=lisi, age=19], Person [id=201003, name=zhangsan, age=25], Person [id=201002, name=zhaoliu, age=27], Person [id=201006, name=lisi, age=24], Person [id=201005, name=kuroro, age=24]]
-----------------------
按ID正序排列:
[Person [id=201001, name=zhangsan, age=24], Person [id=201002, name=zhaoliu, age=27], Person [id=201003, name=zhangsan, age=25], Person [id=201004, name=lisi, age=19], Person [id=201005, name=kuroro, age=24], Person [id=201006, name=lisi, age=24]]
按ID逆序排列:
[Person [id=201006, name=lisi, age=24], Person [id=201005, name=kuroro, age=24], Person [id=201004, name=lisi, age=19], Person [id=201003, name=zhangsan, age=25], Person [id=201002, name=zhaoliu, age=27], Person [id=201001, name=zhangsan, age=24]]
-----------------------
按年龄正序排列:
[Person [id=201004, name=lisi, age=19], Person [id=201001, name=zhangsan, age=24], Person [id=201005, name=kuroro, age=24], Person [id=201006, name=lisi, age=24], Person [id=201003, name=zhangsan, age=25], Person [id=201002, name=zhaoliu, age=27]]
按年龄逆序排列:
[Person [id=201002, name=zhaoliu, age=27], Person [id=201003, name=zhangsan, age=25], Person [id=201001, name=zhangsan, age=24], Person [id=201005, name=kuroro, age=24], Person [id=201006, name=lisi, age=24], Person [id=201004, name=lisi, age=19]]
-----------------------
按名字正序排列:
[Person [id=201005, name=kuroro, age=24], Person [id=201004, name=lisi, age=19], Person [id=201006, name=lisi, age=24], Person [id=201001, name=zhangsan, age=24], Person [id=201003, name=zhangsan, age=25], Person [id=201002, name=zhaoliu, age=27]]
按名字逆序排列:
[Person [id=201002, name=zhaoliu, age=27], Person [id=201001, name=zhangsan, age=24], Person [id=201003, name=zhangsan, age=25], Person [id=201004, name=lisi, age=19], Person [id=201006, name=lisi, age=24], Person [id=201005, name=kuroro, age=24]]
- 【小程序】用策略模式完成自定义类的排序(改进版)
- 【小程序】用策略模式完成自定义类的排序
- 我自己完成的第一个JAVA小程序改进版——银行业务调度系统Version2.0
- 文件读写与快速排序的小程序 已完成
- 改进的java小程序
- 策略模式 用其它方法改进
- 策略模式和自定义排序规则
- 策略模式的小例子
- 使用JavaScript完成一个对字符串数组进行排序的小程序
- 改进的合并排序算法(小数组内使用插入排序算法)
- 冒泡排序的 改进版
- 今天完成的一个小程序
- 对城市名搜索(汉字、拼音)功能的改进 / 小程序城市区县定位模块改进
- 鸡尾酒排序(改进的冒泡排序)
- 策略模式使用的小技巧
- 快速排序(2)算法改进--小的子文件、三者取中、重复关键字三路划分
- 策略模式小例子
- 策略模式小例子
- Ubuntu: Linux系统下如何修改文档及文件夹权限
- Hdu-2066 一个人的旅行
- Linux常用命令
- C语言循环的小艺术
- Facebook IPO将推迟至2012年末,以便更好留住人才
- 【小程序】用策略模式完成自定义类的排序(改进版)
- 如何用普通SIM卡激活苹果 iphone 4、iPhone 3GS 和 iPhone 3G
- 分享一个常识 - 如果你也和VC 打交道
- Linux下安装maven
- VC中如何产生 Release 版本二进制文件对应的 PDB 文件(转)
- Java程序练习-链表二合一
- 收藏以下linux查看系统信息的命令
- Android 动画
- VM增加硬盘容量的步骤