我有以下代码: 我试图在TreeSet中插入Item对象,但我没有得到欲望输出。
public class Main
{
public static void main(String a[])
{
Item i1=new Item(1,"aa");
Item i2=new Item(5,"bb");
Item i3=new Item(10,"dd");
Item i4=new Item(41,"xx");
Item i5=new Item(3,"x5");
TreeSet t=new TreeSet();
t.add(i1);
t.add(i2);
t.add(i3);
t.add(i4);
t.add(i5);
System.out.println(t);
}
}
class Item implements Comparable<Item>
{
String nm;
int price;
public Item(int n,String nm)
{
this.nm=nm;
price=n;
}
public int compareTo(Item i1)
{
if(price==i1.price)
return 0;
else if(price>=i1.price)
return 1;
else
return 0;
}
public String toString()
{
return "\nPrice "+price+" Name : "+nm;
}
}
输出:
[价格1名称:aa,
价格5名称:bb,
价格10名称:dd,
价格41名称:xx]
Item i5=new Item(3,"x5");
未插入原因?
为什么我可以在TreeSet中插入。
答案 0 :(得分:3)
您尚未正确实施compareTo()
。这是javadoc的摘录:
Compares this object with the specified object for order. Returns a negative integer,
zero, or a positive integer as this object is less than, equal to, or greater than
the specified object.
如果当前对象的价格低于您所比较的对象的价格,则您的实施不会返回-1
。
答案 1 :(得分:2)
在compareTo
方法中,您应该else return -1;
!
答案 2 :(得分:2)
在compareTo
替换:
else
return 0;
使用:
else
return -1;
答案 3 :(得分:2)
实施Comparable
的班级必须遵守合同:如果a.compareTo(b) < 0
则b.compareTo(a) > 0
。你的不遵守。
答案 4 :(得分:0)
主要问题在于你的compareTo方法。你已经实现了错误的逻辑。我修改了你的类并在我的eclipse中测试它给出了所需的输出。看下面的代码。
import java.util.TreeSet;
public class Main
{
public static void main(String a[])
{
Item i1=new Item(1,"aa");
Item i2=new Item(5,"bb");
Item i3=new Item(10,"dd");
Item i4=new Item(41,"xx");
Item i5=new Item(3,"x5");
TreeSet<Item> t=new TreeSet<Item>();
t.add(i1);
t.add(i2);
t.add(i3);
t.add(i4);
t.add(i5);
System.out.println(t);
}
}
class Item implements Comparable<Item>
{
String nm;
int price;
public Item(int n,String nm)
{
this.nm=nm;
price=n;
}
public int compareTo(Item i1)
{
// Objects equal so no need to add
if(price==i1.price)
{
return 0;
}
// Object are greater
else if(price>i1.price)
{
return 1;
}
// Object is lower
else
{
return -1;
}
}
public String toString()
{
return "\nPrice "+price+" Name : "+nm;
}
}