题目及解答:策略模式+泛型(对Person类按姓名、id、年龄正序、倒序排序)

题目要求:

加入有若干个Person类对象存在一个List当中,对它们进行排序,分别按照名字、年龄、id号进行排序(要有正序和倒序两种方式)。加入年龄或者姓名重复,按照id号的正序进行排序。要求使用策略模式和泛型进行。


程序如下:

1.Person类定义

package strategy.demo;
import java.util.*;
public class Person 
{
private String name;
private int age;
private int id;


public Person(int id, String name, int age)
{
this.id = id;
this.name = name;
this.age = age;
}


public void setId(int id)
{
this.id = id;
}
public int getId()
{
return this.id;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return this.age;
}
public String say()
{
return "学号:"+this.id +", 姓名:"+this.name+ ", 年龄:"+this.age;
}
}

2.按照姓名排序

①正序

package strategy.demo;
import java.util.*;
public class  NameUpSort implements Strategy
{
public void sort(List<Person> list)
{

Collections.sort(list, new MyComparator6());
}
}
class MyComparator6 implements Comparator<Person>
{
public int compare(Person p1, Person p2)
{
if((p2.getName()).equals(p1.getName()))
{
return p1.getId() - p2.getId();
}
return (p1.getName()).compareTo(p2.getName());
}
}

②倒序

package strategy.demo;
import java.util.*;
public class  NameDownSort implements Strategy
{
public void sort(List<Person> list)
{

Collections.sort(list, new MyComparator5());
}
}
class MyComparator5 implements Comparator<Person>
{
public int compare(Person p1, Person p2)
{
if((p2.getName()).equals(p1.getName()))
{
return p1.getId() - p2.getId();
}
return (p2.getName()).compareTo(p1.getName());
}
}

3.按照id排序

①正序

package strategy.demo;
import java.util.*;
public class  IdUpSort implements Strategy
{
public void sort(List<Person> list)
{
Collections.sort(list, new MyComparator4());
}
}
class MyComparator4 implements Comparator<Person>
{
public int compare(Person p1, Person p2)
{
return p1.getId() - p2.getId();
}
}

②倒序

package strategy.demo;
import java.util.*;
public class  IdDownSort implements Strategy
{
public void sort(List<Person> list)
{

Collections.sort(list, new MyComparator3());
}
}
class MyComparator3 implements Comparator<Person>
{
public int compare(Person p1, Person p2)
{
return p2.getId() - p1.getId();
}
}


4.按照年龄排序

①正序

package strategy.demo;
import java.util.*;
public class  AgeUpSort implements Strategy
{
public void sort(List<Person> list)
{

Collections.sort(list, new MyComparator2());
}
}
class MyComparator2 implements Comparator<Person>
{
public int compare(Person p1, Person p2)
{
if(p2.getAge() == p1.getAge())
{
return p1.getId() - p2.getId();
}
return p1.getAge() - p2.getAge();
}
}

②倒序

package strategy.demo;
import java.util.*;
public class  AgeDownSort implements Strategy
{
public void sort(List<Person> list)
{

Collections.sort(list, new MyComparator1());
}
}
class MyComparator1 implements Comparator<Person>
{
public int compare(Person p1, Person p2)
{
if(p2.getAge() == p1.getAge())
{
return p1.getId() - p2.getId();
}
return p2.getAge() - p1.getAge();
}
}

5.Strategy接口定义

package strategy.demo;
import java.util.*;
interface Strategy 
{
public void sort(List<Person> list);
}


6.Client类定义

package strategy.demo;
import java.util.*;
public class Client 
{
public static void main(String[] args) 
{

List<Person> ls = new ArrayList<Person>();
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)); 

System.out.println("-----------按姓名升序排序-----------");
Strategy str1 = new NameUpSort();
str1.sort(ls);
Client.print(ls);
System.out.println("-----------按姓名降序排序-----------");
Strategy str2 = new NameDownSort();
str2.sort(ls);
Client.print(ls);
System.out.println("-----------按id升序排序-----------");
Strategy str3 = new IdUpSort();
str3.sort(ls);
Client.print(ls);
System.out.println("-----------按id降序排序-----------");
Strategy str4 = new IdDownSort();
str4.sort(ls);
Client.print(ls);
System.out.println("-----------按年龄升序排序-----------");
Strategy str5 = new AgeUpSort();
str5.sort(ls);
Client.print(ls);
System.out.println("-----------按年龄降序排序-----------");
Strategy str6 = new AgeDownSort();
str6.sort(ls);
Client.print(ls);


}
public static void print(List<Person> ls)
{
for(int i = 0; i< ls.size(); i++)
{
Person p = ls.get(i);
System.out.println(p.say());
}
}
}

编译时:javac -d . *.java

执行时:java strategy.demo.Client


结果:


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我将为你介绍如何在 Java 中建立泛型泛型方法,并进行调用。 首先,让我们看一下如何建立泛型泛型是指具有一个或多个型参数的。我们可以使用型参数来代替具体的数据型,从而使更通用、更灵活。例如,下面是一个简单的泛型示例: ```java public class Pair<T1, T2> { private T1 first; private T2 second; public Pair(T1 first, T2 second) { this.first = first; this.second = second; } public T1 getFirst() { return first; } public T2 getSecond() { return second; } } ``` 在上面的示例中,我们定义了一个 `Pair` ,该有两个型参数 `T1` 和 `T2`。我们可以使用这个来表示一对值,其中一个值的型是 `T1`,另一个值的型是 `T2`。 接下来,让我们看一下如何建立泛型方法。泛型方法是指具有一个或多个型参数的方法。我们可以使用型参数来代替具体的数据型,从而使方法更通用、更灵活。例如,下面是一个简单的泛型方法示例: ```java public class Utils { public static <T> void printArray(T[] array) { for (T element : array) { System.out.print(element + " "); } System.out.println(); } } ``` 在上面的示例中,我们定义了一个 `printArray` 方法,该方法有一个型参数 `T`。我们可以使用这个方法来打印任何型的数组。 现在,我们来看一下如何调用泛型泛型方法。对于泛型,我们需要在创建对象时指定型参数。例如: ```java Pair<Integer, String> p1 = new Pair<>(1, "hello"); Pair<Double, Double> p2 = new Pair<>(3.14, 2.71); ``` 在上面的示例中,我们创建了两个 `Pair` 对象,一个用于存储一个 `Integer` 和一个 `String`,另一个用于存储两个 `Double`。 对于泛型方法,我们需要在调用方法时指定型参数。例如: ```java Integer[] arr1 = {1, 2, 3, 4, 5}; String[] arr2 = {"hello", "world"}; Utils.printArray(arr1); // 输出:1 2 3 4 5 Utils.printArray(arr2); // 输出:hello world ``` 在上面的示例中,我们调用了 `printArray` 方法,并传递了两个不同型的数组作为参数。由于该方法是泛型方法,因此编译器会根据传递的参数型自动推断出型参数 `T` 的具体型。 希望这个示例能够帮到你,祝你学习愉快!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值