2016-10-29 4 views
0

要素1,2,3,4,5,6,7,8,9,10の文字列ツリーセット(ts)があるとします。 エレメントにアクセスできるように、ツリーセット内にビルドされたメソッドがありますか? たとえば3にアクセスするには、[2]して8 ts [7]にアクセスすることができます(そのようなもの)。 私はこの方法を使用:私は実行したとき、それは任意のO/Pを示しませんでしたが、私はI = 0をしなかったならば、それは、1,2,3、すなわち、すべてのO/Pを示したもののインデックスを使用してTreesetの要素にアクセスする

 Iterator<String> it = ts.iterator(); 
     int i=0; 
     while(it.hasNext()) { 
      String ele=it.next(); 
      if(i==2){ 
       System.out.println(ele+""); 
      } 
      i++; 
     } 

を4,5,6,7,8,9,10。

第二に、誰もがそれはHashSetのを使用するのが最善であるときことを私に伝えることができ、TreeSetのとLinkedHashSetの

答えて

0

TreeSetは、あなたが(デフォルトとして自然順序付けを項目の順序を持​​っているが、独自の順序を定義することができることを意味しNavigableSetです関係をComparatorまたはComparableインターフェイスを使用して)、この順序でアイテムをナビゲートすることができます。ただし、インデックスのメカニズムはありません。基本的にTreeSetは、red-black treeであるTreeMapに基づいています。このようなデータ構造では、索引(効率的なアクセスの意味での索引ではなく要素索引)はあまり意味がありません。これに対して、従来のhash tableであるHashMapに基づいている。このデータ構造では、順序は定義されていません。あなたはO(1)時に各項目を検索することができますが、ハッシュ関数が使用されています。

LinkedHashSetは、HashSetのサブクラスです。その他の場合HashSetメソッドは新しいメソッドが定義されていないので、LinkedHashSetは自然順序やインデックスのような機能をこれ以上許可しません。ただし、要素が挿入される順序を追跡する補助リンクリストがあります。このようにしてLinkedHashSet.iterator()メソッドまたはforループで反復処理すると、挿入した順序で要素が取得されます。

要素を個別にアクセスする場合は、基本的にHashSetが適切です。または、最も簡単なSetの実装では、一般的なケースでHashSetを使用できます。挿入の順序を維持する必要がある場合は、LinkedHashSetを使用する必要があります。また、カスタム注文や自然順序付けを実施する必要がある場合は、TreeSetを使用してください。

0

ts [2]のようなコレクション内の要素にアクセスしたい場合は、コレクションの組み込みメソッドを使用してコレクションを配列に変換してください。

それ以外の場合は、イテレータを使用することが、コレクションの要素にアクセスするための標準的で効率的な方法です。

2番目の質問の場合、ハッシュセットはハッシュテーブルとして使用されます。 LinkedHashSetは、要素が挿入されたのと同じ方法で格納されたハッシュテーブルとして使用されます。 TreeSetは、ナビゲーションを使用したコレクションに使用されます。

詳細は、Oracleのマニュアルを参照してください。

関連する問題