Student stu = getMax(c1);
System.out.println(stu);
Collection<String> c2 = new ArrayList<String>();
c2.add("abcd");
c2.add("java");
c2.add("z");
c2.add("nba");
String s = getMax(c2);
System.out.println("s="+s);
//Collection<Dog> c3 = new ArrayList<Dog>();
//getMax(c3);//已经做了限定,说明传递的集合中的元素类型必须是Comparable的子类。否则编译失败。
}
// 求两个对象的最大值
public static <T extends Comparable<? super T>> T getMax(Collection<? extends T> c,Comparator<? super T> comp){
if(comp==null){
return getMax(c);
}
Iterator<? extends T> it = c.iterator();
T max = it.next();
while(it.hasNext()){
T temp = it.next();
if(comp.compare(temp, max)>0){
max = temp;
}
}
return max;
}
// 升级版。要操作的元素的类型确定不?不确定。使用泛型限定。getMax方法接收的集合中的元素无论时什么类型,必须具备自然排序,必须是Comparable的子类。
public static <T extends Comparable<? super T>> T getMax(Collection<? extends T> c){
//t 和 父类
Iterator<? extends T> it = c.iterator();
T max = it.next();
while(it.hasNext()){
T temp = it.next();
if(temp.compareTo(max)>0){
max = temp;
}
}
return max;
}
/*
//不加泛型时,无法明确集合中的元素时什么类型,为了便于操作用Object
public static Object getMax(Collection c1) {
// 1,定义变量,记录集合中任意一个元素,Collection集合取出元素的方式只有迭代器。
Iterator it = c1.iterator();
Object max = it.next();
// 2,遍历容器。
while (it.hasNext()) {
Object o = it.next();
Comparable temp1 = (Comparable)o;
if (temp.compareTo(max) > 0) {
max = temp1;
}
}
return max;
}
*/
/*
* //这个功能虽然实现,但是有局限性,因为这个功能只能对存储了Student对象的集合进行最大值的获取。 public static Student
* getMax(Collection<Student> c1) {
*
* //1,定义变量,记录集合中任意一个元素,Collection集合取出元素的方式只有迭代器。 Iterator<Student> it =
* c1.iterator(); Student max = it.next();
*
* //2,遍历容器。 while(it.hasNext()){ Student temp1 = it.next();
*
* if(temp.compareTo(max) > 0){ max = temp2; } } return max; }
*/