0

書籍を保存できるコレクションを作成する必要がある場合、どのようなコレクションを使用する必要がありますか?また、(図書館の場合)流通しているコピーの数はどれくらいですか?ArrayListを使用しますが、発行年順に本を並べ替えることもできるようにしたいと思います。

4

4 に答える 4

3

Book Classのすべてのattributesを使用して を作成できますbookComparableそのための を実装しBook Class、そこに並べ替えロジックを記述します。

を維持し、メソッドList<Book>を使用して、実装されたロジックに従って並べ替えます。Collections.sortListSorting

アップデート: -

高速ルックアップに関する限り、aMapが常に最善の策です。また、辞書ルックアップのような構造を実装するのに適しています。そのためには、各本を一意に識別する属性が必要です。次に、本を として保存Map<String, Book>します。タイプkeyが.idString

また、この場合、並べ替えロジックが少し変わります。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あなたの値として持っているでしょう。

今、私はあなたのコレクションがそれよりも少し複雑かもしれないと思うので、フィールドとしてBook持っているクラスを作りたいと思うかもしれません.番号またはその他の一意の識別子。 CountstringBookstring

于 2012-11-05T19:27:17.510 に答える
0

単純な教育プロジェクトやおもちゃのプロジェクトを超えて、メモリ内コレクションではなくデータベースを使用する必要があります。(本当の答えではありませんが、述べておく価値があると思います。)

于 2012-11-05T19:27:18.603 に答える