集合学習


しゅうごう
What is Collection used for?
オブジェクトは固有のデータをカプセル化するために使用され、オブジェクトは格納される必要があります.オブジェクトの個数が不確定な場合は、セットを使用して格納する必要があります.
集合の特徴:1.オブジェクトを格納するためのコンテナ2.集合の長さは可変3.集合に基本データ型値を格納できない
Collection
集合は内部のデータ構造が異なるため,多様な集合が存在する.集合の共有機能を絶えず上へ抽出することで,集合フレームワークが形成される.
フレームの最上位Collectionインタフェース:
1.増加
boolean add(E e)
boolean addAll(Collection extends E> c)//                 

2.削除
void clear()//           
boolean remove(Object o)//                (    )
boolean removeAll(Collection> c)//                  (    )

3.判断
boolean contains(Object o)//            ,    true
boolean containsAll(Collection> c)//                  ,   true
boolean isEmpty()//        

4.取得
int size()//      
Iterator iterator()//       :             
              ,               ,                   。           ,        ,                     
  iterator  
Iterator        Collection             

5.その他の方法
boolean retainAll(Collection> c)//                  (   )
Object[] toArray()//                 

反復器の使用:
Collection c = new ArrayList();
c.add("1");
c.add("2");
c.add("3");
c.add("4");
System.out.println(c);
Iterator it = c.iterator();
//hasNext:          ( :true, :false)
while(it.hasNext()) {
	//next:           
	System.out.println(it.next());
}

result:
	[1, 2, 3, 4]
	1
	2
	3
	4

ListとSet
List:秩序(保存と取り出しの順序が一致する)、要素にインデックスがあり、重複する要素を許可する
1.追加
boolean add(E e)//               
void add(int index, E element)//                 

2.削除
E remove(int index)//             
boolean remove(Object o)//                

3.修正
E set(int index, E element)//      (    )             

4.取得
E get(int index)//             
int indexOf(Object o)//                   ,          ,   -1
int lastIndexOf(Object o)//                    ,          ,   -1
List subList(int fromIndex, int toIndex)//          fromIndex( )  toIndex      (    )

反復器:ListIterator
共通サブクラス:
1.Vector:内部は配列、同期
2.ArrayList:内部は配列であり、非同期であり、Vectorに代わる
配列の長さは可変ではありません.可変するには、新しい配列を作成して挿入する必要があります.
3.LinkedList:内部はチェーンテーブル、非同期

上の配列とチェーンテーブルの長所と短所はデータ構造と同じです
分割挿入と削除
Set:無秩序、重複を許さない要素
1.HashSet:内部はハッシュ表、非同期
ハッシュ・テーブルは、要素が同じかどうかを判断することは、2つの要素のハッシュ値が同じかどうかを判断することであり、同じであれば、2つのオブジェクトの内容が同じかどうかを判断することである.
ハッシュ値を判断するのと同じ対象のhashCodeメソッドを用い,内容を判断するのと同じequalsメソッドを用い,ハッシュ値が異なる場合equalsを判断する必要はない.
2.LinkedHashSet:ハッシュテーブルとチェーンテーブルはSetインタフェースを実現し、予測可能な反復順序を有する.この実装はHashSetとは異なり,すべてのエントリの実行双方向チェーンテーブルに維持される.非同期
3.TreeSet:下部に赤と黒のツリーを使用して、セット内の要素を並べ替えることができ、同期しない
ソートが必要な場合は、要素はcompareToインタフェースを実装します.

arrayが表示されます:配列を考えなければなりません.クエリーが速く、インデックスがあります.
linkを見ます:チェーンテーブルを思い出して、削除が速くて、add get remove(first|last)があります
hashを見る:ハッシュテーブルを考えるには、一意性があり、要素はhashcodeとequalsメソッドを上書きする必要があります.
treeを見る:ツリーを考え、並べ替え、2つのインタフェースを考えます:Comparable、Comparator
Map
キー値ペアを一度に追加
Mapに重複するビルドを含めることはできません.各キーは最大1つの値にマッピングできます.
一般的な方法:
1.増加
V put(K key, V value)//      key    ,       null

2.削除
void clear()//  map
V remove(Object key)//    (      ),  map         

3.判断
boolean containsKey(Object key)//             ,    true
boolean containsValue(Object value)//   map              ,    true
boolean isEmpty()//            ,    true

4.取得
V get(Object key)//           ,     null          
int size()//             

主な方法:

  • Set keySet()//   map      Set  
    

    mapのすべての要素を取り出す方法:
    keySetメソッドでmap内のすべてのキーのSetセットを取得し、Setの反復器で各キーを取得し、キーで値を取得します.

  • Set> entrySet()//   map       Set  
    

    mapをSetに変換して反復することでentrySetメソッドを用いて取得することができ,キー値ペアのマッピング関係をオブジェクトとしてSetセットに格納し,このマッピング関係のタイプがMap.Entryである.

  • Collection values()//   map      Collection  
    

    一般的なサブクラスオブジェクト
    1.Hashtable:内部はハッシュ表、同期、nullをキーまたは値として許可しない
    Properties:キー値ペア型のプロファイルの情報を格納し、IOテクノロジーと組み合わせることができます.
    2.HashMap:内部はハッシュ表であり、同期せず、nullをキーまたは値として許可する
    3.TreeMap:内部は二叉木で、同期せず、Map集合中のキーを並べ替えることができる
    汎用型
    メリット:
    1.実行時期の問題ClassCastExceptionをコンパイル時期に移行
    2.強制転換の面倒を避ける
    操作の参照データ型が不確定な場合は、<>を使用してデータ型を入力します.
    汎用テクノロジーはコンパイラに使用されるテクノロジーで、コンパイル時に使用され、タイプのセキュリティが確保されます.
    汎用消去:実行時に汎用が削除され、生成されたclassファイルには汎用は含まれません.
    なぜ消去するのか:実行中のクラスローダと互換性があるため
    汎用的な補償:実行時に、要素のタイプを取得して変換動作を行うことで、使用者が強制的に変換する必要はありません.
    汎用クラス
    汎用型を用いて漢方薬操作の参照データ型を受信する
    クラス内の操作の参照データ型が不確定な場合は、汎用で表す
    class Tool{
    
    }
    

    汎用メソッド
    public  void tool(QQ qq){
    
    }
    
    public void tool(QQ qq){
    
    }
    
    //        ,                   ,      
    public static  void tool(QQ qq){
    
    }
    

    汎用インタフェース
    interface Tool{
    	public void shou(T t);
    }
    
    class ToolImpl1 implements Tool{
    	public void show(String str){
    		System.out.prinln("show:"+str);
    	}
    }
    
    class ToolImpl2 implements Tool{
    	public void show(Q q){
    		System.out.prinln("show:"+q);
    	}
    }
    
    //  
    public static void main(String[] args){
    	ToolImpl2 in = new InterImpl2();
    	in.show(5);
    }
    

    集合調査のテクニック
    唯一必要ですか?
    必要:Setは順序を指定する必要がありますか?必要:TreeSet不要:HashSetしかし、ストレージと一致する順序(順序):LinkedHashSet不要:Listは頻繁に削除する必要がありますか?必要:LinkedList不要:ArrayList
    各容器の構造と所属体系をどのように記録しますか?名前を見る
    List |–ArrayList |–LinkdeList
    Set |–HashSet |–TreeSet
    Foreachループループコレクション
    for(       : Collection  ){
    
    }
    

    このような遍歴方式は,一定の限界があり,遍歴しかできず,集合中の要素を操作することができない.
    Mapを巡るときは、mapをsetに変換する必要があります
    for(       : map.keySet()){
    
    }
    
    for(Map.Entryme : map.entrySet()){
    }

    関数可変パラメータ
    呼び出し:newAdd(5,1,2,3)またはnewAdd(5)...
    public static int newAdd(int … arr){
    }