import java.util.Comparator;

/**
* 定义一个Rectangle类,该类提供getLength和getWidth方法。利用图1-18中的findMax例程编写
* 一种main方法,该方法创建一个Rectangle数组并首先找出依面积最大的Rectangle对象,然后
* 找出依周长最大的Rectangle对象。
* @author wulei
*/
public class RectangleTest {
/**
* 构造一个矩形
*/
private int width,height;
private String name;

public RectangleTest(int width, int height){
this.width = width;
this.height = height;
}

public int getLength(){
return (width+height)<<2;
}

public int getArea(){
return width*height;
}

public String getName(){
return "("+width+","+height+")";
}

public static <T> T findMax(T[] arr,Comparator<? super T> cmp){
if(null == arr || cmp == null){
return null;
}
int index = 0;
for (int i = 1; i < arr.length; i++) {
if(cmp.compare(arr[i], arr[index]) > 0){
index = i;
}
}
return arr[index];
}

/**
* 长度比较器
*/
public static class LengthCompare implements Comparator<RectangleTest>{

@Override
public int compare(RectangleTest o1, RectangleTest o2) {
if(o1.getLength() > o2.getLength()){return 1;}
else if (o1.getLength() == o2.getLength()) {
return 0;
}else{
return -1;
}
}

}

/**
* 面积比较器
*/
public static class AreaCompare implements Comparator<RectangleTest>{

@Override
public int compare(RectangleTest o1, RectangleTest o2) {
if(o1.getArea() > o2.getArea()) {return 1;}
else if (o1.getArea() == o2.getArea()) {
return 0;
}
else {
return -1;
}
}

}

public static void main(String[] args) {
RectangleTest[] arr = new RectangleTest[]
{new RectangleTest(5, 5),new RectangleTest(6,4),new RectangleTest(3, 8)};
System.out.println(findMax(arr, new LengthCompare()).getName());
System.out.println(findMax(arr, new AreaCompare()).getName());
}

}

最新文章

  1. SQLServer------将表和内容导入到另一个数据库
  2. HTML5复习整理
  3. webdriver零碎知识点
  4. 钉钉客户端JS-API权限签名算法.NET版
  5. 韩服MU
  6. Sping mvc 环境下使用kaptcha 生成验证码
  7. 实验三实验报告 20135324&amp;&amp;20135330
  8. eclipse中logcat偶尔不显示log的问题解决办法
  9. 小白日记15:kali渗透测试之弱点扫描-漏扫三招、漏洞管理、CVE、CVSS、NVD
  10. 一网打尽OkHttp中的缓存问题
  11. 用C语言模仿Python函数
  12. nodejs 语法学习(持续更新)
  13. 理解spread运算符与rest参数
  14. JDK1.8中的线程池
  15. 整理SpringMVC
  16. 对于for循环中使用let或var时,i的作用域范围的记录
  17. 洛谷P2516 [HAOI2010]最长公共子序列(LCS,最短路)
  18. java线程执行的优先级
  19. ajax请求报语法错误
  20. sql sever跨数据库复制数据的方法

热门文章

  1. [No0000C9]神秘的掐指一算是什么?教教你也会
  2. CM5.x配置spark错误解决
  3. iOS10原生的语音转文字功能
  4. PHP 正则表达式---匹配模式
  5. PHP之Boolean
  6. 转:GET和POST两种基本请求方法的区别
  7. LeetCode 706 Design HashMap 解题报告
  8. LeetCode 965 Univalued Binary Tree 解题报告
  9. java 集合(五)MapDemo
  10. 【PyQt5-Qt Designer】浅谈关闭窗口