Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java:TreeSet集合和可比接口_Java_Collections - Fatal编程技术网

java:TreeSet集合和可比接口

java:TreeSet集合和可比接口,java,collections,Java,Collections,我有以下代码: 我试图在树集合中插入Item对象,但没有得到desire输出 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对象,但没有得到desire输出

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;
    }    
}
公共类主
{
公共静态void main(字符串a[]
{
第i1项=新项目(1,“aa”);
第i2项=新项目(5,“bb”);
第i3项=新项目(10,“dd”);
第i4项=新项目(41,“xx”);
项目i5=新项目(3,“x5”);
树集=新树集();
t、 添加(i1);
t、 添加(i2);
t、 添加(i3);
t、 添加(i4);
t、 添加(i5);
系统输出打印ln(t);
}
}
类项实现了可比较的
{
字符串nm;
国际价格;
公共项(整数n,字符串nm)
{
这个。nm=nm;
价格=n;
}
公共内部比较(项目i1)
{
如果(价格==i1.价格)
返回0;
否则如果(价格>=i1.价格)
返回1;
其他的
返回0;
}
公共字符串toString()
{
返回“\n价格”+价格+”名称:“+nm;
}    
}
输出:

[价格1名称:aa,
价格5名称:bb,
价格10名称:dd,
价格名称:xx]

项目i5=新项目(3,“x5”)未插入为什么?

为什么我可以插入树集。

您没有正确实现
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

比较中替换:

else
        return 0;
与:


实现
Comparable
的类必须遵守合同:如果
A.compareTo(b)<0
b.compareTo(A)>0
。您的不符合。

主要问题在于您的比较方法。你实施了错误的逻辑。我已经修改了您的类,并在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;
    }    
}
import java.util.TreeSet;
公共班机
{
公共静态void main(字符串a[]
{
第i1项=新项目(1,“aa”);
第i2项=新项目(5,“bb”);
第i3项=新项目(10,“dd”);
第i4项=新项目(41,“xx”);
项目i5=新项目(3,“x5”);
树集=新树集();
t、 添加(i1);
t、 添加(i2);
t、 添加(i3);
t、 添加(i4);
t、 添加(i5);
系统输出打印ln(t);
}
}
类项实现了可比较的
{
字符串nm;
国际价格;
公共项(整数n,字符串nm)
{
这个。nm=nm;
价格=n;
}
公共内部比较(项目i1)
{
//对象相等,因此无需添加
如果(价格==i1.价格)
{
返回0;
}
//物体更大
否则如果(价格>i1.价格)
{
返回1;
}
//物体较低
其他的
{
返回-1;
}
}
公共字符串toString()
{
返回“\n价格”+价格+”名称:“+nm;
}    
}
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;
    }    
}