如果我需要创建一个可以存储书籍的集合以及流通中有多少副本(对于图书馆),我应该使用哪种集合? 我会使用ArrayList,但我也希望能够按照发行年份的顺序对书籍进行排序。
答案 0 :(得分:3)
您可以使用Book Class
的所有attributes
创建book
。并为Comparable
实现Book Class
并在其中编写排序逻辑。
维护List<Book>
并使用Collections.sort
方法,根据已实施的List
逻辑对Sorting
进行排序。
更新: -
就快速查询而言,Map
总是最好的选择。并且适合实现字典查找类结构。为此,您需要一些唯一标识每本书的属性。然后将您的图书存储为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]}"
答案 1 :(得分:0)
java.util.TreeMap可用于索引和排序此类需求。
查看http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html了解详情。
您可以将Book对象用作映射到副本数量的键作为值。
答案 2 :(得分:0)
好吧,如果你的集合的整个目的是存储书籍的数量,而不是字典/地图,或者调用任何java的键值集合。
它可能以title
为密钥,count
为您的值。
现在我怀疑你的收藏可能比这更复杂,所以你可能想要一个Book
类,其中Count
为一个字段,然后我可能会有一个string
- &gt;无论如何Book
字典/地图,string
,因为它是露水十进制数字或其他一些唯一标识符。
答案 3 :(得分:0)
除了简单的教育或玩具项目之外,您还希望使用数据库而不是内存中的集合。 (不是真正的答案,但我认为值得说明。)