集合练习:
(1)声明一个圆类型,包含半径,实现Comparable接口,按照半径大小排序
(2)存储几个圆对象到TreeSet中,并且遍历显示
代码:
定义圆类型:(这里主要重写compareTo,构造器和set、get关系不大。)
public class Circle implements Comparable<Circle>{
private double radius;
@Override
public String toString() {
return "Circle{" +
"radius=" + radius +
'}';
}
public Circle() {
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public Circle(double radius) {
this.radius = radius;
}
@Override
public int compareTo(Circle o) {
//方法一:
// int i = (int)(this.radius - o.radius);
//方法二:
//推荐:调用Double里compare方法
int i = Double.compare(this.radius, o.radius);
return i;
}
}
测试类:
import java.util.TreeSet;
public class TestCircle {
public static void main(String[] args) {
TreeSet<Circle> set = new TreeSet<>();
set.add(new Circle(3.0));
set.add(new Circle(5.8));
set.add(new Circle(7.5));
set.add(new Circle(9.9));
set.add(new Circle(5.5));
for (Circle circle : set) {
System.out.println(circle);
}
}
}
注意这里有个细节,在方法一中 如果定义为double小数类型,插入小数相减后强转int类型可能等于0,如5.8减5.5得0.3强转后为0。
可以把重写中的方法一和方法二注释切换来比较看一下,得出结果分别为:
方法一:
Circle{radius=3.0}
Circle{radius=5.8}
Circle{radius=7.5}
Circle{radius=9.9}
方法二:
Circle{radius=3.0}
Circle{radius=5.5}
Circle{radius=5.8}
Circle{radius=7.5}
Circle{radius=9.9}