Java 我的树集只添加了一个类对象
我正在尝试将下面的书本对象添加到树集。但是,当我调试代码时,它表示集合的大小为1,并且只包含添加的第一个对象(book1)。当我注释掉book1时,book2是唯一添加的对象,等等。为什么JVm只识别一个对象 代码: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
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
objectscompareTo
方法相等(提供)定义,因此TreeSet忽略了重复对象
解决方案:
正确定义compareTo方法,记住这一点,返回值应该是
负整数、零或正整数,因为此对象小于、等于或大于指定对象
什么compariable#comparieto
返回值表示-
负整数、零或正整数,因为此对象较小
大于、等于或大于指定对象。
将多个对象添加到树集中时,TreeSet实例使用其compareTo
(或compareTo
)方法执行所有元素比较,因此,从集合的角度来看,此方法视为相等的两个元素是相等的。所有对象都通过Book
objectscompareTo
方法相等(提供)定义,因此TreeSet忽略了重复对象
解决方案:
正确定义compareTo方法,记住这一点,返回值应该是
负整数、零或正整数,因为此对象小于、等于或大于指定对象。根据您的要求将您的compareTo方法更新。或者至少按以下方式更新,它将允许在树集中插入所有对象
public int compareTo(Book o) {
// TODO Auto-generated method stub
return this.compareTo(o);
}
根据您的需求更新您的compareTo方法。或者至少按照以下更新,它将