2 qq 31930741 qq_31930741 于 2016.04.15 22:33 提问

java关于TreeSet集合的问题,为什么每次添加只能添加进去一个,再添加的时候就会覆盖掉前面那个

不知道为什么只能添加一个对象进去,添加第二次的时候就覆盖掉了第一次添加进去的。麻烦大家了!

这是main方法
if("a".equalsIgnoreCase(option)){
//查看图书的功能
d.cheekBook();
}
else if("b".equalsIgnoreCase(option)){
//添加图书的功能
System.out.println("请输入书名:");
bookName=sc.next();
System.out.println("请输入作者:");
author=sc.next();
System.out.println("请输入出版社:");
press=sc.next();
System.out.println("请输入价格:");
price=sc.next();
System.out.println("请输入书号:");
bookID=sc.next();
System.out.println("请输入出版日期:");
pubdate=sc.next();
boolean bl2=d.addBook(bookName,author,press,price,bookID,pubdate);
if(bl2){
System.out.println("添加成功");
System.out.println("请选择功能:查看图书(A) 添加图书(B) 修改图书(C) 删除图书(D)");
option=sc.next();
if("a".equalsIgnoreCase(option)){
//查看图书
d.cheekBook();
}
else if("b".equalsIgnoreCase(option)){
//添加图书
System.out.println("请输入书名:");
bookName=sc.next();
System.out.println("请输入作者:");
author=sc.next();
System.out.println("请输入出版社:");
press=sc.next();
System.out.println("请输入价格:");
price=sc.next();
System.out.println("请输入书号:");
bookID=sc.next();
System.out.println("请输入出版日期:");
pubdate=sc.next();
bln=d.addBook(bookName,author,press,price,bookID,pubdate);
if(bln){
System.out.println("添加成功");
}
}

    这是添加图书和查看图书的的方法                       
                                //创建book对象
Book book=new Book();
//创建TreeSet集合,里面储存book对象的属性
TreeSet<Book> tree=new TreeSet<Book>();
//查看图书的功能
public void cheekBook(){
    if(tree.isEmpty()){
        System.out.println("请添加图书!!!");
    }
    else{
        System.out.println("查看图书");
        System.out.println("|书名|     |作者|     |出版社|    |价格|   |书号|   |出版日期|");
        Iterator<Book> it=tree.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }

    }
}

//添加图书
public boolean addBook(String bookName, String author, String press, String price, String bookID, String pubdate){
    boolean bl2=false;
    book.setBookName(bookName);
    book.setAuthor(author);
    book.setPress(press);
    book.setPrice(price);
    book.setBookID(bookID);
    book.setPubdate(pubdate);
    System.out.println("新书信息如下:"+book.toStrings());
    System.out.println("是否保存该书? (Y)是 (N)否");
    option=sc.next();
    if("y".equalsIgnoreCase(option)){
        System.out.println("正在添加....");
        tree.add(book);//把图书的信息添加到tree集合中
        bl2=true;
    }
    else{
        System.out.println("已取消");
    }
    return bl2;
}

2个回答

a156384
a156384   2016.04.15 22:50
已采纳

Book book=new Book();
//创建TreeSet集合,里面储存book对象的属性
TreeSet tree=new TreeSet();

第一次添加的是book对象,保存到tree中。tree获得book的地址。
第二次添加的还是book对象,只是改了下值。保存到tree中进行覆盖。

第一个修改的地方
//创建引用名,不new对象
Book book ;
//创建TreeSet集合,里面储存book对象的属性
TreeSet tree=new TreeSet();

第二个修改的地方
public boolean addBook(String bookName, String author, String press, String price, String bookID, String pubdate){
boolean bl2=false;

    //在方法中new对象,可以保证每次的对象不一样
    book = new Book();

book.setBookName(bookName);
book.setAuthor(author);
book.setPress(press);
book.setPrice(price);
book.setBookID(bookID);
book.setPubdate(pubdate);
System.out.println("新书信息如下:"+book.toStrings());
System.out.println("是否保存该书? (Y)是 (N)否");
option=sc.next();
if("y".equalsIgnoreCase(option)){
    System.out.println("正在添加....");
    tree.add(book);//把图书的信息添加到tree集合中
    bl2=true;
}
else{
    System.out.println("已取消");
}
return bl2;

}

qq_31930741
qq_31930741 真的非常感谢你,这是老师让我们完成的一个小项目。你的回答让我又学到了一个以前忽略的知识点,谢谢!
一年多之前 回复
qq_31930741
qq_31930741 谢谢,非常感谢!!!
一年多之前 回复
renwotao2009
renwotao2009   2016.04.16 08:33

看一楼,你每次都修改的是一个book对象,自然是覆盖掉以前的,add是每次都new一个

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!