書籍を保存できるコレクションを作成する必要がある場合、どのようなコレクションを使用する必要がありますか?また、(図書館の場合)流通しているコピーの数はどれくらいですか?ArrayListを使用しますが、発行年順に本を並べ替えることもできるようにしたいと思います。
4 に答える
Book Class
のすべてのattributes
を使用して を作成できますbook
。Comparable
そのための を実装しBook Class
、そこに並べ替えロジックを記述します。
を維持し、メソッドList<Book>
を使用して、実装されたロジックに従って並べ替えます。Collections.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]}"
java.util.TreeMap を使用して、この種の要件の索引付けとソートを行うことができます。
詳細については、 http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.htmlを確認してください。
Book オブジェクトを値として部数にマップされたキーとして使用できます。
コレクションの全体的な目的が本の数を格納することである場合は、辞書/マップ、または Java のキーと値のコレクションが呼び出されるものは何でもです。
それはおそらくtitle
あなたのキーとして、そしてcount
あなたの値として持っているでしょう。
今、私はあなたのコレクションがそれよりも少し複雑かもしれないと思うので、フィールドとしてBook
持っているクラスを作りたいと思うかもしれません.番号またはその他の一意の識別子。 Count
string
Book
string
単純な教育プロジェクトやおもちゃのプロジェクトを超えて、メモリ内コレクションではなくデータベースを使用する必要があります。(本当の答えではありませんが、述べておく価値があると思います。)