创建子类与父类,有球体,正方体,圆柱体,并求其体积和表面积,并让其实现Comparable接口,实现对表面积的排序;在测试类中创建数组,利用Arrays.sort或Collections.sort对该数组排序。
import java.util.Arrays;
abstract class Shape implements Comparable<Shape> {
public abstract double getVolume();
public abstract double getSurfaceArea();
@Override
public int compareTo(Shape o) {
return Double.compare(getSurfaceArea(), o.getSurfaceArea());
}
}
class Sphere extends Shape {
private final double radius;
Sphere(double radius) {
this.radius = radius;
}
@Override
public double getVolume() {
return 4.0 / 3.0 * Math.PI * radius * radius * radius;
}
@Override
public double getSurfaceArea() {
return 4.0 * Math.PI * radius * radius;
}
}
class Cube extends Shape {
private final double side;
Cube(double side) {
this.side = side;
}
@Override
public double getVolume() {
return side * side * side;
}
@Override
public double getSurfaceArea() {
return 6.0 * side * side;
}
}
class Cylinder extends Shape {
private final double radius;
private final double height;
Cylinder(double radius, double height) {
this.radius = radius;
this.height = height;
}
@Override
public double getVolume() {
return Math.PI * radius * radius * height;
}
@Override
public double getSurfaceArea() {
return 2.0 * Math.PI * radius * (radius + height);
}
}
class Shapes {
public static void main(String[] args) {
Shape[] shapes = {
new Sphere(2.0),
new Cube(3.0),
new Cylinder(2.0, 4.0)
};
Arrays.sort(shapes);
for (Shape shape : shapes) {
System.out.println("表面积: " + shape.getSurfaceArea() + ", 体积: " + shape.getVolume());
}
}
}
从上面分析的内容中可以看出,如果对于除基本数据类型的数据使用Arrays.sort()
或ArrayList.sort()
进行排序时,有两种使用方式:
CompareTo()
,重写的方法中定义自己的排序逻辑Compare()
,同样需要在重写方法中定义排序的规则,然后将其作为方法的参数传入另外,在代码实现中我们还随便复习了一下有关集合类的遍历的三种方法:
使用for-each进行遍历
for (Student student : s) {
System.out.println(student);
}
使用Iterator进行遍历
Iterator<String> iter = list.iterator();
while (iter.hasNext()){
System.out.println(iter.next());
}
使用forEach()
进行遍历
list.forEach(k-> System.out.println(k));