0

如果我需要创建一个允许我存储书籍的集合以及流通的副本数量(对于图书馆),我应该使用哪种类型的集合?我会使用 ArrayList,但我也希望能够按发行年份的顺序对书籍进行排序。

4

4 回答 4

3

你可以用你所拥有的Book Class一切来创建一个。并为此实现一个并在其中编写排序逻辑。attributesbookComparableBook Class

维护一个List<Book>, and useCollections.sort方法,List根据实现的Sorting逻辑对你进行排序。

更新: -

就快速查找而言,aMap始终是最好的选择。并且适合实现字典查找类型的结构。为此,您需要一些唯一标识每本书的属性。然后将您的书存储为Map<String, Book>key可能属于id的类型String

此外,在这种情况下,您的排序逻辑会发生一些变化。现在你必须根据你的Map's value,即在的基础上attributes进行排序Book

这是您可以使用的示例代码。我刚刚考虑过基于id. 您可以根据需要更改排序逻辑:-

class Book {
    private int id;
    private String title;

    public Book() {
    }

    public Book(int id, String title) {
        this.id = id;
        this.title = title;
    }

        @Override
    public String toString() {
        return "Book[Title:" + this.getTitle() + ", Id:" + this.getId() + "]";
    }

    // Getters and Setters
}

public class Demo {
    public static void main(String[] args) {

        final Map<String, Book> map = new HashMap<String, Book>() {
            {
                put("b1", new Book(3, "abc"));
                put("b2", new Book(2, "c"));
            }
        };
        List<Map.Entry<String, Book>> keyList = new LinkedList<Map.Entry<String, Book>>(map.entrySet());

        Collections.sort(keyList, new Comparator<Map.Entry<String, Book>>() {
            @Override
            public int compare(Map.Entry<String, Book> o1, Map.Entry<String, Book> o2) {
                return o1.getValue().getId() - o2.getValue().getId();
            }
        });


        Map<String, Book> result = new LinkedHashMap<String, Book>();
        for (Iterator<Map.Entry<String, Book>> it = keyList.iterator(); it.hasNext();) {
            Map.Entry<String, Book> entry = it.next();
            result.put(entry.getKey(), entry.getValue());
        }
        System.out.println(result);
    }
}

输出: -

"{b2=Book[Title:c, Id:2], b1=Book[Title:abc, Id:3]}"
于 2012-11-05T19:23:59.900 回答
0

java.util.TreeMap 可用于对此类需求进行索引和排序。

查看http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html了解更多详情。

您可以使用 Book 对象作为映射到副本数作为值的键。

于 2012-11-05T19:24:07.263 回答
0

好吧,如果您的集合的全部目的是存储书籍的数量,而不是字典/地图,或者调用任何 java 的键值集合。

它可能会title作为你的密钥,count作为你的价值。

现在我怀疑你的集合可能比这更复杂一些,所以你可能想要创建一个作为字段的BookCount,然后我可能会有一个string->Book字典/地图,string因为它是露水十进制编号或其他一些唯一标识符。

于 2012-11-05T19:27:17.510 回答
0

除了简单的教育或玩具项目之外,您还想使用数据库而不是内存中的集合。(不是真正的答案,但我认为值得说明。)

于 2012-11-05T19:27:18.603 回答