2

HashSetにデータを挿入するプログラムを作成しました...コードは次のとおりです

public class Person implements Comparable<Person>
{
    private int person_id;
    private String person_name;
    public Person(int person_id,String person_name)
    {
        this.person_id=person_id;
        this.person_name=person_name;
    }
    /* getter and setter method */
    public boolean equals(Object obj)
    {
        Person p=(Person)obj;
        if(!(p instanceof Person))
        {
            return false;
        }
        else if(this.person_id==p.person_id)
            return true;
        else
            return false;
    }
    @Override
    public int hashCode()
    {
        return person_id*6;
    }
    @Override
    public int compareTo(Person o)
    {
        if(this.person_id>o.person_id)
            return 1 ;
        else if(this.person_id<o.person_id)
            return -1;
        else return 0;
    }
}

私は他の2つのクラスを貼り付けていません。これらのクラスで行っているのは、データを入力することだけで、もう1つはメインクラスです。

Java Doc Apiを介して、Collectionsクラスにsort()というメソッドがあることを知りました。今、私が抱えている問題は、ソート方法がリストを取ることです。

ここにドキュメントソート(リストリスト)からの署名があります。ハッシュセットをソートする問題に直面しています。誰かが HashSet を TreeSet に変換するように言いました (スレッドの 1 つでスタックオーバーフローも言及されています)...これが唯一の方法ですか?

4

2 に答える 2

9

ほとんど唯一の方法です。HashSetソートされることを意図したものではありませんでした。containsaddおよびremove操作のパフォーマンスと引き換えに、アイテムの順序を維持することはありません。

http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html

このクラスは、ハッシュ テーブル (実際には HashMap インスタンス) によってサポートされる Set インターフェイスを実装します。セットの反復順序については保証されません。特に、順序が時間の経過とともに一定であることを保証するものではありません。このクラスは null 要素を許可します。

したがって、TreeSetクラスの自然な順序に従って並べ替えを維持するだけを使用してください。あなたのクラスが実装されているのがわかります。Comparableこれにより、簡単に使用できますTreeSet

于 2013-02-23T15:50:49.437 に答える
0

代わりに使用LinkedHashSetしてください。並べ替えられた方法で要素を挿入するため、セットは常に並べ替えられます。

詳細については、 http ://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html を参照してください。

反復順序が予測可能な Set インターフェースのハッシュ テーブルとリンク リストの実装。この実装が HashSet と異なる点は、そのすべてのエントリを実行する二重リンク リストを維持することです。このリンクされたリストは、要素がセットに挿入された順序 (挿入順序) である反復順序を定義します。要素がセットに再挿入されても、挿入順序は影響を受けないことに注意してください。(呼び出しの直前に s.contains(e) が true を返すときに s.add(e) が呼び出されると、要素 e はセット s に再挿入されます。)

于 2015-02-16T10:36:40.883 に答える