概述
1 为一个类定义泛型类型,需要将泛型类型放在类名之后,例如GenericStack.为一个方法定义泛型类型,要将泛型类型放在方法返回类型之前,例如 void max(E o1, E o2)。
2 Comparable接口
假设要设计一个找出两个相同类型对象中较大者的通用方法。这里的对象可以是两个学生、两个日期、两个圆、两个矩形或者两个正方形。为了实现这个方法,这两个对象必须是可比较的。因此,这两个对象都该有的共同行为就是comparable(可比较的)。为此,Java提供了Comparable接口。
接口的定义如下
public interface Comparable<E>{
public int compareTo(E o);
}
compareTo方法判断这个对象相对于给定对象o的顺序,并且当这个对象小于、等于或大于给定对象o时、分别返回 负整数、0或正整数。当判断为正整数时就会放在给定对象o的后面
Java类库中的许多类实现了Comparable接口以定义对象的自然顺序。Byte,short,Integer,Long,Float,Double,Character,BigInteger,BigDecimal,Calendar,String以及Date类。
如果对象是Comparablee接口类型的实例的话,JavaAPI中的java.util.Arrays.sort(Object[])方法就可以使用compareTo方法来对数组中的对象进行比较和排序。
public class SortComparableObjects{
public static void main(String[] args){
String[] cities = {"Savannah", "Boston", "Atlanta", "Tempa"};
java.util.Arrays.sort(cities);
for (String city: cities)
System.out.print(city + " ");
System.out.println();
BigInteger[] hugeNumbers = { new BigInteger("323121414322131545"),
new BigInteger("129319237184194289641"),
new BigInteger("1239129814714014")};
java.util.Arrays.sort(hugeNumbers);
for (BigInteger number: hugeNumbers)
System.out.print(number + " ");
System.out.println();
}
}
运行结果如下
如果是要对没有实现Conparable接口的类进行排序,则要先实现Comparable。
public class ComparableRectangle extends Rectangle implements Comparable<ComparableRectangle> {
double width;
double height;
public ComparableRectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double getArea() {
return width*height;
}
@Override
public int compareTo(ComparableRectangle o) {
return (int)(getArea() - o.getArea());
}
@Override
public String toString() {
return super.toString() + "width" + " = " +width + " " +
"height" + " = " + height + " " + " Area: " + getArea();
}
public static void main(String[] args) {
ComparableRectangle[] rectangles = {
new ComparableRectangle(3.4,5.4),
new ComparableRectangle(12.24,52.4),
new ComparableRectangle(7.4,15.4),
new ComparableRectangle(1.4,25.4) };
java.util.Arrays.sort(rectangles);
for(Rectangle rectangle: rectangles) {
System.out.println(rectangle.toString() + " ");
}
}
}
运行结果如下
(从结果可以看出 先调用了子类的数据域,而不是父类,当然如果你把子类的参数删了,在参数类型正确的情况下也不会报错)
最后
以上就是超级刺猬为你收集整理的Comparable接口的使用的全部内容,希望文章能够帮你解决Comparable接口的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复