2016-04-08 2 views
0

リンクされたハッシュセットから、挿入された順序と同じ順序で要素を取得する必要があります。 検索するには、要素を正確な挿入順序で取得してください。挿入順にLinkedHashSet要素を取得し、それらをローカル変数に保存します。

LinkedHashSet<String> personDetails = new LinkedHashSet<String>(); 
    //persondetails => John, kennedy, Female 
    List<String> details = new ArrayList<>(personDetails); 
    String firstName = details.get(0); 
    String lastName = details.get(1); 
    String gender = details.get(2); 

は中の挿入順序でそれらを取得するために私の主な目的を投げているリストへの変換の順序を変更するインデックスで取得するリストにLinkedHashSetの変換が、リストに変換することは私の要素をシャッフルするだろう怖いですリストは順序を保持しないので、最初の場所。

ここで別のまたは私の間違いを教えてください。

+1

'List'インタフェースはリストが順序付けされていることを指定し、使用するコンストラクタは指定された' Collection'のイテレータの順序が保持されていると言うので、コードは混在してはいけません。彼らは本当ですか? – Vampire

答えて

3

まず、LinkedHashSetを挿入順に従って取得するために、Listに変換する必要はありません。反復子でSetを反復することができます。例えば

:すべての

Iterator<String> iter = personDetails.iterator(); 
String firstName = null; 
if (iter.hasNext()) 
    firstName = iter.next(); 
String lastName = null; 
if (iter.hasNext()) 
    lastName = iter.next(); 
String gender = null; 
if (iter.hasNext()) 
    gender = iter.next(); 

第二に、あなたが入力としてソースCollcetionを受け取るコンストラクタを持つArrayListを作成し、CollectionArrayListに要素を追加するために繰り返されます。反復順序は、Collectionのイテレータの実装に依存し、LinkedHashSetの場合、反復順序は挿入順です。したがって、Listは、挿入注文を保存します。

あなたはJavadocの中でこれを見ることができます:

java.util.ArrayList.ArrayList(コレクションC)

は、彼らが順番に指定されたコレクション、の要素を含むリストを作成コレクションのイテレータによって返されます。

関連する問題