【发布时间】:2016-11-02 15:34:17
【问题描述】:
我正在尝试将以下书籍对象添加到 TreeSet。但是,当我调试代码时,它说集合的大小为 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);
}
这里是到目前为止的全部代码(它必须都在同一个类中):
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class Book implements Comparable<Book> {
String title;
String author;
String publisher;
int publicationYear;
List<String> authorList = new ArrayList<String>();
public Book(String title, String author, String publisher, int publicationYear){
this.title = title;
this.author = author;
this.publisher = publisher;
this.publicationYear = publicationYear;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public List<String> getAuthorList() {
return authorList;
}
public void setAuthorList(List<String> authorList) {
this.authorList = authorList;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public int getPublicationYear() {
return publicationYear;
}
public void setPublicationYear(int publicationYear) {
this.publicationYear = publicationYear;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String toString(){
return "Book Title: " + getTitle() + "\nAuthor Name: " + getAuthor() + "\nPublisher: " + getPublisher() + "\nYear of Publication: " + getPublicationYear();
}
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);
}
@Override
public int compareTo(Book o) {
// TODO Auto-generated method stub
return 0;
}
}
【问题讨论】:
-
请提供图书类代码
-
TreeSet 依赖于您的 Book 类中的代码来完成其工作(例如调用该类的 equals/hashCode 方法)。因此,很可能,您对这些方法的实现 不是应有的样子。例如,您想阅读 tutorials.jenkov.com/java-collections/hashcode-equals.html 之类的内容
-
TODO Auto-generated method stub。应该用实际代码替换它..
标签: java collections treeset