Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 我的树集只添加了一个类对象_Java_Collections_Treeset - Fatal编程技术网

Java 我的树集只添加了一个类对象

Java 我的树集只添加了一个类对象,java,collections,treeset,Java,Collections,Treeset,我正在尝试将下面的书本对象添加到树集。但是,当我调试代码时,它表示集合的大小为1,并且只包含添加的第一个对象(book1)。当我注释掉book1时,book2是唯一添加的对象,等等。为什么JVm只识别一个对象 代码: public static void main(String[] args) { Set<Book> bookSet = new TreeSet<Book>(); Book book1 = new Book("Digital Fortre

我正在尝试将下面的书本对象添加到树集。但是,当我调试代码时,它表示集合的大小为1,并且只包含添加的第一个对象(book1)。当我注释掉book1时,book2是唯一添加的对象,等等。为什么JVm只识别一个对象

代码:

 public static void main(String[] args) {
    Set<Book> bookSet = new TreeSet<Book>();

    Book book1 = new Book("Digital Fortress", "Dan Brown", "St. Martins Press", 1998);
    Book book2 = new Book("Angels and Demons", "Dan Brown", "Pocket Books", 2000);
    Book book3 = new Book("Deception Point", "Dan Brown", "Pocket Books", 2001);
    Book book4 = new Book("The Davinci Code", "Dan Brown", "DoubleDay", 2003);
    Book book5 = new Book("The Lost Symbol", "Dan Brown", "DoubleDay", 2009);
    Book book6 = new Book("Inferno", "Dan Brown", "DoubleDay", 2013);

    bookSet.add(book1);
    bookSet.add(book2);
    bookSet.add(book3);
    bookSet.add(book4);
    bookSet.add(book5);
    bookSet.add(book6);

    System.out.println(bookSet);
}
publicstaticvoidmain(字符串[]args){
Set bookSet=new TreeSet();
book1=新书(“数字堡垒”、“丹·布朗”、“圣马丁出版社”,1998年);
Book book2=新书(“天使与魔鬼”、“丹·布朗”、“袖珍书”,2000年);
Book book3=新书(“欺骗点”、“丹·布朗”、“口袋书”,2001年);
Book book4=新书(《达芬奇密码》,《丹·布朗》,《双日》,2003年);
Book book5=新书(《失落的符号》,《丹·布朗》,《双日》,2009年);
book6=新书(“地狱”、“丹·布朗”、“双日”,2013年);
增加(第1册);
增加(第2册);
增加(第3册);
增加(第4册);
增加(第5册);
增加(第6册);
System.out.println(bookSet);
}
以下是到目前为止的全部代码(必须全部在同一个类中):

import java.util.ArrayList;
导入java.util.Iterator;
导入java.util.List;
导入java.util.Set;
导入java.util.TreeSet;
公共类书{
字符串标题;
字符串作者;
字符串发布器;
国际出版年;
List authorList=new ArrayList();
公共图书(字符串标题、字符串作者、字符串出版商、国际出版年){
this.title=标题;
this.author=作者;
this.publisher=publisher;
this.publicationYear=publicationYear;
}
公共字符串getTitle(){
返回标题;
}
公共无效集合标题(字符串标题){
this.title=标题;
}
公共列表getAuthorList(){
返回作者列表;
}
public void setAuthorList(列表authorList){
this.authorList=authorList;
}
公共字符串getPublisher(){
返回出版商;
}
public void setPublisher(字符串发布器){
this.publisher=publisher;
}
public int getPublicationYear(){
报税年度;
}
公共无效设置publicationYear(int publicationYear){
this.publicationYear=publicationYear;
}
公共字符串getAuthor(){
返回作者;
}
公共void setAuthor(字符串编写器){
this.author=作者;
}
公共字符串toString(){
返回“书名:“+getTitle()+”\n作者姓名:“+getAuthor()+”\n发布者:“+getPublisher()+”\n发布日期:“+getPublicationYear()”;
}
公共静态void main(字符串[]args){
Set bookSet=new TreeSet();
book1=新书(“数字堡垒”、“丹·布朗”、“圣马丁出版社”,1998年);
Book book2=新书(“天使与魔鬼”、“丹·布朗”、“袖珍书”,2000年);
Book book3=新书(“欺骗点”、“丹·布朗”、“口袋书”,2001年);
Book book4=新书(《达芬奇密码》,《丹·布朗》,《双日》,2003年);
Book book5=新书(《失落的符号》,《丹·布朗》,《双日》,2009年);
book6=新书(“地狱”、“丹·布朗”、“双日”,2013年);
增加(第1册);
增加(第2册);
增加(第3册);
增加(第4册);
增加(第5册);
增加(第6册);
System.out.println(bookSet);
}
@凌驾
公共国际比较(o册){
//TODO自动生成的方法存根
返回0;
}  

}

所有书籍都是相等的(返回0即可看出)。
集合
不能包含重复项,因此只能添加一本(第一本书)

@Override
public int compareTo(Book o) {
    // TODO Auto-generated method stub
    return 0;
}  

您需要填写方法的详细信息。负数表示
这本
书小于
o
,反之亦然,正数表示所有书都相等(返回0即可看出)。
集合
不能包含重复项,因此只能添加一本(第一本书)

@Override
public int compareTo(Book o) {
    // TODO Auto-generated method stub
    return 0;
}  
@Override
public int compareTo(Book o) {
    // TODO Auto-generated method stub
    return 0;
}
您需要填写方法的详细信息。负数表示
这本
书小于
o
,正数则相反

@Override
public int compareTo(Book o) {
    // TODO Auto-generated method stub
    return 0;
}
什么
compariable#comparieto
返回值表示-

负整数、零或正整数,因为此对象较小 大于、等于或大于指定对象。

将多个对象添加到树集中时,TreeSet实例使用其
compareTo
(或
compareTo
)方法执行所有元素比较,因此,从集合的角度来看,此方法视为相等的两个元素是相等的。所有对象都通过
Book
objects
compareTo
方法相等(提供)定义,因此TreeSet忽略了重复对象

解决方案: 正确定义compareTo方法,记住这一点,返回值应该是 负整数、零或正整数,因为此对象小于、等于或大于指定对象

什么
compariable#comparieto
返回值表示-

负整数、零或正整数,因为此对象较小 大于、等于或大于指定对象。

将多个对象添加到树集中时,TreeSet实例使用其
compareTo
(或
compareTo
)方法执行所有元素比较,因此,从集合的角度来看,此方法视为相等的两个元素是相等的。所有对象都通过
Book
objects
compareTo
方法相等(提供)定义,因此TreeSet忽略了重复对象

解决方案: 正确定义compareTo方法,记住这一点,返回值应该是
负整数、零或正整数,因为此对象小于、等于或大于指定对象。

根据您的要求将您的compareTo方法更新。或者至少按以下方式更新,它将允许在树集中插入所有对象

public int compareTo(Book o) {
// TODO Auto-generated method stub
return this.compareTo(o);
} 

根据您的需求更新您的compareTo方法。或者至少按照以下更新,它将