我这儿有一个题目,编写书籍和图书馆之间的关系。public class Book {
private String isbn="";
private String author="";
private String title="";

public Book(String isbn,String author, String title){
this.isbn = isbn;
this.author = author;
this.title = title;
System.out.println(toString());
}

public String toString(){
return isbn+" "+author+" "+title;
}还有各个值的set,get方法都写了。
现在要求写一个Library类,其中有三个方法
public boolean sortedInsert(Book newbook){}

public Book searchISBN(String isbn){}        public Collection searchAuthor(String autor){}Book类和Library类之间的关系应该用Set来实现,Set中的值要用Iterator读取。
但是Set不是只能单个值吗?应该用来保存ISBN还是索性用Set<Book>来表示,Set<Book>应该怎么使用,不知道哪位大哥能帮一下忙?万分感谢!

解决方案 »

  1.   

    用Set<Book>才能反映类和类之间的关系
    for example
    class Library {
        //如果是数据库实体映射,那么自己定义多对一关系
        //即多个book对应一个library
        Set<Book> set = new TreeSet(new Comparator<Book>() {
            public int compare(Book b1, Book b2) {
                //自己定义排序方式
            }
        });    public boolean sortedInsert(Book newbook){
            set.add(newbook);
        }    public Book searchISBN(String isbn){
            for (Book b : set) {
                if (b.getIsbn().equals(isbn)) {
                    return b;
                }
            }
            return null;
        }    public Collection searchAuthor(String autor){
            Set<Book> tmp = new HashSet<Book>();
            for (Book b : set) {
                if (b.getAuthor().equals(autor)) {
                    tmp.add(b);
                }
            }
            return tmp;
        }                                   
    }
      

  2.   

    ISBN又称国际标准书号,国际标准书号的组成
      国际标准书号由13位数字组成。前三位数字代表图书,中间的9个数字分为三组,分别表示组号、出版社号和书序号,最后一个数字是校验码。这个应该肯定是唯一的,
    用SET, 判断是否是同一BOOK,, 应该也就是拿这个来,重写BOOK的 hashCode 方法, 返回ISBN, 但是13位对应9位(hashCode返回int, int最好形容9位).
    想了下, 用MAP吧,
    ISBN做KEY, BOOK做value
      

  3.   

    多谢阿宝的帮助。我排序是用了 b1.getISBN().compareTo(b2.getISBN()),通过ISBN排序。不过我还是有一点不太清楚,为什么在这儿要用到new Comparator<Book>()? 一般是在什么情况下用到这个的?
      

  4.   

    我本来是想用作者做Key,书名做value来进行输出的,不过这个东西刚开始看,还不是很熟悉。
      

  5.   

    写了一个以书名为key, 作者为value的Map程序 public Map<String, String> stockByAuthor(){
    Map<String,String> map = new TreeMap<String,String>();
    Iterator<Book> i = set.iterator();
    while(i.hasNext()){
    Book b = i.next();
    map.put(b.getTitle(),b.getAuthor());
    }
    Set<Map.Entry<String,String>> entries = map.entrySet();
    for(Map.Entry<String, String> e:entries)
    System.out.println(e);
    return map;
    }