3

日付に基づいてハッシュセット内のデータをソートするにはどうすればよいですか

この形式でmongodbからデータを取得し、2015-01-17後でそれを形式に変換するプログラムがありMMM dd yyyyますが、ここでデータをソートするにはどうすればよいですか??

これは私のプログラムです

public class MyObject {

    public static void main(String args[]) {
        String sym = "BAC";
        Set<String> set = myDAO.getInstance().getMeAllExpirationDates(sym);
        for (String String : set) {

            System.out.println(String);
        }
    }

    public Set<String> getMeAllExpirationDates(String sym) throws Exception {
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sdf2 = new SimpleDateFormat("MMM dd yyyy");
        Set<String> set = new HashSet<String>();

        BasicDBObject query = new BasicDBObject();
        query.put("symbol", sym);
        Security sec = null;
        DBCursor cursor = collection.find(query);
        while (cursor.hasNext()) {
            sec = (Security) cursor.next();
            Date date = sdf1.parse(sec.getTkExpirationDate());
            String result = sdf2.format(date);
            set.add(result);
        }
        return set;
    }
}
4

3 に答える 3

3

HashSetは順不同のコレクションです - その要素は特定の順序で保存されません。アイテムが入ったバッグと見なすことができますHashSet。アイテムはすべてバッグに入っていますが、特定の順序ではありません。

Set特定の順序で要素を含む が必要な場合はSortedSet、 のTreeSet代わりにの実装を使用しHashSetます。

TreeSetデフォルトでは、その要素を「自然な順序」で格納します。別の順序が必要な場合は、 ;TreeSetを取るコンストラクタを使用できます。要素をソートする順序を定義Comparatorする独自のものを提供します。Comparator

于 2013-09-19T10:13:24.087 に答える
1

挿入の順序を維持するには、実装LinkedHashSetを使用する必要があります

交換

Set<String> set = new HashSet<String>();

Set<String> set = new LinkedHashSet<String>();

さらに良いことに、カスタムComparatorでTreeSetを使用し、エントリをすぐに追加しながら並べ替えます。

于 2013-09-19T10:15:33.653 に答える
1

最も簡単なのはComparator. オブジェクトにインターフェースを実装して、Comparable日付が互いにどのように関連しているかをオブジェクトに伝える必要があります。質問に対する具体的な回答については、データをソートする方法を HashSet に指示するを参照してください。

于 2013-09-19T10:13:33.273 に答える