题目要求:
加入有若干个Person类对象存在一个List当中,对它们进行排序,分别按照名字、年龄、id号进行排序(要有正序和倒序两种方式)。加入年龄或者姓名重复,按照id号的正序进行排序。要求使用策略模式进行。
程序如下:
1.Person类定义
package person.strategy;
public class Person
{
String name;
int age;
int id;
public Person(int id, String name, int age)
{
this.name = name;
this.age = age;
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;
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String say()
{
return "Id: "+this.id+", Name: "+this.name+", Age: "+this.age;
}
}
2.按照姓名排序
①正序
package person.strategy;
import java.util.Comparator;
public class NameUpOrder implements Comparator
{
public int compare(Object o1, Object o2)
{
Person p1 = (Person)o1;
Person p2 = (Person)o2;
int num = (p1.getName()).compareTo(p2.getName());
if(num == 0)
{
return p1.getId() - p2.getId(); //姓名相同按照id正序排列
}
return (p1.getName()).compareTo(p2.getName());
}
}
②倒序
package person.strategy;
import java.util.Comparator;
public class NameDownOrder implements Comparator
{
public int compare(Object o1, Object o2)
{
Person p1 = (Person)o1;
Person p2 = (Person)o2;
int num = (p2.getName()).compareTo(p1.getName());
if(num == 0)
{
return p1.getId() - p2.getId(); //姓名相同按照id正序排列
}
return (p2.getName()).compareTo(p1.getName());
}
}
3.按照年龄排序
①正序
package person.strategy;
import java.util.Comparator;
public class AgeUpOrder implements Comparator
{
public int compare(Object o1, Object o2)
{
Person p1 = (Person)o1;
Person p2 = (Person)o2;
int num = p1.getAge() - p2.getAge();
if(num == 0)
{
return p1.getId() - p2.getId(); //年龄相同按照id正序排列
}
return p1.getAge() - p2.getAge();
}
}
package person.strategy;
import java.util.Comparator;
public class AgeDownOrder implements Comparator
{
public int compare(Object o1, Object o2)
{
Person p1 = (Person)o1;
Person p2 = (Person)o2;
int num = p2.getAge() - p1.getAge();
if(num == 0)
{
return p1.getId() - p2.getId();//年龄相同按照id正序排列
}
return p2.getAge() - p1.getAge();
}
}
4.按照id排序
①正序
package person.strategy;
import java.util.Comparator;
public class IdUpOrder implements Comparator
{
public int compare(Object o1, Object o2)
{
Person p1 = (Person)o1;
Person p2 = (Person)o2;
return p1.getId() - p2.getId();
}
}
package person.strategy;
import java.util.Comparator;
public class IdDownOrder implements Comparator
{
public int compare(Object o1, Object o2)
{
// TODO Auto-generated method stub
return 0;
}
}
5.Client类编写
①使用ArrayList、Collections中的sor():public static <T> void sort(List<T> list,Comparator<? super T> c)
package person.strategy;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Collections;
public class Client
{
public static void main(String args[])
{
Comparator comUpName = new NameUpOrder();
Comparator comDownName = new NameDownOrder();
Comparator comUpAge = new AgeUpOrder();
Comparator comDownAge = new AgeDownOrder();
Comparator comUpId = new IdUpOrder();
Comparator comDownId = new IdDownOrder();
List ls = new ArrayList();
Collections.sort(ls,comUpId);
ls.add(new Person(1, "zhangsan", 20));
ls.add(new Person(2, "lisi", 21));
ls.add(new Person(3, "wangwu", 25));
ls.add(new Person(4, "zhaoliu", 26));
ls.add(new Person(5, "chenqi", 28));
ls.add(new Person(6, "dongba", 10));
ls.add(new Person(7, "zhansan", 15));
ls.add(new Person(8, "liujiu", 26));
for(Iterator iter = ls.iterator(); iter.hasNext();)
{
Person p = (Person)iter.next();
System.out.println(p.say());
}
}
}
②使用TreeSet
package person.strategy;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Client
{
public static void main(String args[])
{
Comparator comUpName = new NameUpOrder();
Comparator comDownName = new NameDownOrder();
Comparator comUpAge = new AgeUpOrder();
Comparator comDownAge = new AgeDownOrder();
Comparator comUpId = new IdUpOrder();
Comparator comDownId = new IdDownOrder();
Set set = new TreeSet(comUpId);
set.add(new Person(1, "zhangsan", 20));
set.add(new Person(2, "lisi", 21));
set.add(new Person(3, "wangwu", 25));
set.add(new Person(4, "zhaoliu", 26));
set.add(new Person(5, "chenqi", 28));
set.add(new Person(6, "dongba", 10));
set.add(new Person(7, "zhansan", 15));
set.add(new Person(8, "liujiu", 26));
for(Iterator iter = set.iterator(); iter.hasNext();)
{
Person p = (Person)iter.next();
System.out.println(p.say());
}
}
}