Java 中具有 Comparable 的 TreeSet 示例
下面的第一个示例显示了将对象添加到 Set 类型的列表时发生的错误。在 Set 中,每个元素必须是唯一的,这就是对象必须与插入前 TreeSet 中的对象相比。首先,让我们看一下下面的代码,它创建了三个 Point” 对象并将它们添加到 TreeSet.
import java.util.TreeSet;编译和执行返回以下结果:
class 点 {
int x,y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
}
public class ImpComparableWrong {
public static void main(String[] args) {
TreeSetd = new TreeSet ();
d.add(新点 (2,4));
d.add(新点 (1,7));
d.add(新点 (5,3));
System.out.println(d.size());
}
}
线程 main” 中的异常 java.lang.ClassCastException: TreeSet.Point 无法强制转换为 java.lang.Comparable原因是 Point 类需要实现接口 Comparable 允许 TreeSet 保存 Point 对象。添加的对象无法与 TreeSet 中的元素进行比较,方法 add() 抛出异常 ClassCastException。要使对象具有可比性,您需要实现 Comparable.
at java.util.TreeMap.compare(Unknown Source)
at java.util.TreeMap.put(Unknown Source)
at java.util.TreeSet.add(Unknown Source)
at java.util.TreeSet.add(Unknown Source)br / atTreeSet.Comparable.main(Comparable.java:17)
以下代码通过实现接口 Comparable:
import java.util.Iterator;此程序输出此结果:
导入 java.util.TreeSet;
class Point 实现 Comparable{
int x,y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
public int compareTo(Point p) {
double dp2 = (double) Math.sqrt(Math.pow(p.x,2) + Math.pow(p.y,2));
double dp = (double) Math.sqrt(Math.pow(x,2) + Math.pow(y,2));
if(dp > dp2)
返回 1;
else
返回 0;
}
}
public class Comparabletest {
public static void main(String[] args) {
TreeSettset = new TreeSet ();
tset.add(新点 (2,4));
tset.add(新点 (1,7));
点 a = 新点 (2,5);
Iteratoriterator = tset.iterator();
while(iterator.hasNext()){
点 p = iterator.next();
System.out.print(p.x +, ”+ p.y);
System.out.println( |p >a: +p.compareTo(a));
}
}
}
2, 4 |p >答:0References:
1, 7 |p >a: 1
Javadoc: TreeSet 类