初心者ノート:javaコレクション要約

7443 ワード

参考資料:http://www.cnblogs.com/xwdreamer/archive/2012/05/30/2526822.html
                    http://blog.csdn.net/touchSea/article/details/750923
まず上図、java集合の構造


主に実装されるインタフェースcollectionの集合
インタフェース:Collection Collection
すべての集合クラスのルートタイプ、主なインタフェースメソッド:boolean add(Ojbect c)
add
public boolean add(E e)

このcollectionに指定した要素が含まれていることを確認します(オプション).このcollectionが呼び出しによって変更された場合は、
true.(このcollectionで重複要素が許可されず、指定した要素がすでに含まれている場合は、
false.)
この操作をサポートするcollectionでは、このcollectionに追加できる要素を制限できます.特に、いくつかのcollectionはnull要素の追加を拒否し、他のいくつかのcollectionは追加可能な要素タイプに制限を課す必要があります.Collectionクラスは、ドキュメントにどの要素を追加できるかに関するすべての制限を明確に指定する必要があります.
collectionが何らかの理由で(すでに要素が含まれている理由を除く)特定の要素の追加を拒否した場合、falseを返すのではなく異常を投げ出す必要があります.これにより、この呼び出しが返された後、collectionには常に指定された要素が含まれていることが保証されます.
このインプリメンテーションは、常に1つのU n s p p p p o rtedOperationExceptionを放出します.
指定者:
インタフェースCollectionadd
パラメータ:e-このcollectionに存在する要素を決定します.
戻り値:
呼び出しによってこのcollectionが変更された場合は、
true
放出:UnsupportedOperationException-このcollectionがサポートされていない場合
add操作ClassCastException-指定した要素のクラスがこのcollectionに追加できない場合NullPointerException-指定した要素がnullであり、このcollectionでnull要素が許可されていない場合IllegalArgumentException-要素の属性がこのcollectionに追加できない場合IllegalStateException-挿入制限のため、エレメントをこの時間に追加できない場合
常に注意しなければならないのは、booleanを返すが、追加が成功したかどうかを示すものではない.Collectionは、この要素の追加を拒否する集合を規定しているため、何らかの理由で例外を投げ出さなければならない.この戻り値はadd()が実行された後、集合の内容が変更されたかどうか(要素の数、位置などの変化の有無).類似のaddAll,remove,removeAll,remainAllも同様である.
Collectionの実装方法にはIteratorという非常に重要な方法があります
iterator
public abstract Iterator iterator()

このcollectionの要素で反復する反復器を返します.
指定者:
インタフェースIterableiterator
指定者:
インタフェースCollectioniterator
戻り値:
このcollectionの要素で反復する反復器.
具体的な方法は次のとおりです.
for(Iterator it = c.iterator(); it.hasNext();) {...}
このほかjavaではインタフェースメソッドも提供されています
java.义齿
既知のすべてのサブインタフェース:
ListIterator, XMLEventReader
すべての既知の実装クラス:
BeanContextSupport.BCSIterator, EventReaderDelegate, Scanner
public interface Iterator
 
   
  

对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:

  • 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
  • 方法名称得到了改进。

此接口是 Java Collections Framework 的成员。 

package listTest;

import java.util.ArrayList;
import java.util.Iterator;

public class ListTest
{

  /**
   * @param args
   */
  public static void main ( String[ ] args )
  {
    ArrayList arrList = new ArrayList( );
    arrList.add( "1" );
    arrList.add( "2" );
    arrList.add( "3" );
    Iterator it = arrList.iterator( );
    for ( int i = 0 ; i < arrList.size( ) ; i ++ )
    {
      String str = arrList.get( i );
      System.out.println( "  list   :" + str );
    }
    for ( int i = 0 ; it.hasNext( ) ; i ++ )
    {
      String str = it.next( );
      System.out.println( "  itertar   :" + str );
    }
  }

}
には、次の結果が表示されます.
  list   :1
  list   :2
  list   :3
  itertar   :1
  itertar   :2
  itertar   :3
対it.hasNext()にとって、彼は次の要素があるかどうかを判断し、iとは関係ありません.
1.HasSet
Setインタフェースのサブクラスで、主な特徴は、重複要素を格納できないことであり、ハッシュの格納方法を採用しているため、順序がないことです.ここでいう順序なしとは,要素挿入の順序が出力の順序と一致しないことを意味する.
package listTest;

import java.util.HashSet;
import java.util.Iterator;

public class ListTest
{
  /**
   * @param args
   */
  public static void main ( String[ ] args )
  {
    HashSet hs = new HashSet( );
    hs.add( "1" );
    hs.add( "1" );
    hs.add( "1" );
    hs.add( "1" );
    Iterator it = hs.iterator( );
    while(it.hasNext( ))
    {
      System.out.println( "     :" + it.next( ) );
    }
  }
}
結果:
     :1
package listTest;

import java.util.HashSet;
import java.util.Iterator;

public class ListTest
{
  /**
   * @param args
   */
  public static void main ( String[ ] args )
  {
    HashSet hs = new HashSet( );
    hs.add( "1" );
    hs.add( "2" );
    hs.add( "1" );
    hs.add( "2" );
    Iterator it = hs.iterator( );
    while(it.hasNext( ))
    {
      System.out.println( "     :" + it.next( ) );
    }
  }
}

結果:
     :2
     :1

無秩序としてテストされた.
要素の挿入順序は出力順序と一致せず、重複要素は含まれません.
2.ArrayList
HashSetとは逆に、重複する要素を保存できます.ArrayListにアクセスすると、反復器はインデックス0から始まり、反復ごとにインデックス値に1を加算します.しかし、HashSetの要素にアクセスすると、各要素はランダムな順序で表示されます.反復中にコレクション内のすべての要素を巡回できると判断できますが、要素がアクセスされる順序は予知できません.ほとんどの場合,ArrayListを一つの配列として扱うことができる.アドレス指定が容易で、挿入と削除が困難です.
package listTest;

import java.util.ArrayList;
import java.util.Iterator;

public class ListTest
{
  /**
   * @param args
   */
  public static void main ( String[ ] args )
  {
    ArrayList hs = new ArrayList( );
    hs.add( "1" );
    hs.add( "2" );
    hs.add( "1" );
    hs.add( "2" );
    Iterator it = hs.iterator( );
    while(it.hasNext( ))
    {
      System.out.println( "     :" + it.next( ) );
    }
  }
}
には、次の結果が表示されます.
     :1
     :2
     :1
     :2
3.LinkList
LinkedListは、任意の場所で効率的に挿入および削除できるシーケンスです.アドレス指定が困難で、挿入と削除が容易です.
package listTest;

import java.util.Iterator;
import java.util.LinkedList;

public class ListTest
{
  /**
   * @param args
   */
  public static void main ( String[ ] args )
  {
    LinkedList hs = new LinkedList( );
    hs.add( "1" );
    hs.add( "2" );
    hs.add( "1" );
    hs.add( "2" );
    Iterator it = hs.iterator( );
    while(it.hasNext( ))
    {
      System.out.println( "     :" + it.next( ) );
    }
  }
}

結果:
     :1
     :2
     :1
     :2
4.HashMap
HashMapには静的内部クラスEntryが実装されており、その重要な属性はkey,value,nextであり、属性key,valueからEntryがHashMapキー値対実装の基礎beanであることが明らかになった.HashMapの基礎は線形配列であり、この配列はEntry[]であり、Mapの内容はEntry[]に保存されている.
きほんアルゴリズム
 
  
//   :
int hash = key.hashCode();//   hashCode       ,      key hash      int 
int index = hash % Entry[].length;
Entry[index] = value;

//   :
int hash = key.hashCode();
int index = hash % Entry[].length;
return Entry[index];

比較
 
 
順序付け
要素の繰り返しを許可するかどうか
Collection
いいえ
はい
List
はい
はい
Set
AbstractSet
いいえ
いいえ
 
HashSet
 
TreeSet
はい(ツリーを二叉で並べ替えます)
Map
AbstractMap
いいえ
key-valueを使用してデータをマッピングおよび格納するには、keyが一意である必要があります.valueは繰り返すことができます.
 
HashMap
 
TreeMap
はい(ツリーを二叉で並べ替えます)