集合学習
しゅうごう
What is Collection used for?
オブジェクトは固有のデータをカプセル化するために使用され、オブジェクトは格納される必要があります.オブジェクトの個数が不確定な場合は、セットを使用して格納する必要があります.
集合の特徴:1.オブジェクトを格納するためのコンテナ2.集合の長さは可変3.集合に基本データ型値を格納できない
Collection
集合は内部のデータ構造が異なるため,多様な集合が存在する.集合の共有機能を絶えず上へ抽出することで,集合フレームワークが形成される.
フレームの最上位Collectionインタフェース:
1.増加
2.削除
3.判断
4.取得
5.その他の方法
反復器の使用:
ListとSet
List:秩序(保存と取り出しの順序が一致する)、要素にインデックスがあり、重複する要素を許可する
1.追加
2.削除
3.修正
4.取得
反復器: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.増加
2.削除
3.判断
4.取得
主な方法:
mapのすべての要素を取り出す方法:
keySetメソッドでmap内のすべてのキーのSetセットを取得し、Setの反復器で各キーを取得し、キーで値を取得します.
mapをSetに変換して反復することでentrySetメソッドを用いて取得することができ,キー値ペアのマッピング関係をオブジェクトとしてSetセットに格納し,このマッピング関係のタイプがMap.Entryである.
一般的なサブクラスオブジェクト
1.Hashtable:内部はハッシュ表、同期、nullをキーまたは値として許可しない
Properties:キー値ペア型のプロファイルの情報を格納し、IOテクノロジーと組み合わせることができます.
2.HashMap:内部はハッシュ表であり、同期せず、nullをキーまたは値として許可する
3.TreeMap:内部は二叉木で、同期せず、Map集合中のキーを並べ替えることができる
汎用型
メリット:
1.実行時期の問題ClassCastExceptionをコンパイル時期に移行
2.強制転換の面倒を避ける
操作の参照データ型が不確定な場合は、<>を使用してデータ型を入力します.
汎用テクノロジーはコンパイラに使用されるテクノロジーで、コンパイル時に使用され、タイプのセキュリティが確保されます.
汎用消去:実行時に汎用が削除され、生成されたclassファイルには汎用は含まれません.
なぜ消去するのか:実行中のクラスローダと互換性があるため
汎用的な補償:実行時に、要素のタイプを取得して変換動作を行うことで、使用者が強制的に変換する必要はありません.
汎用クラス
汎用型を用いて漢方薬操作の参照データ型を受信する
クラス内の操作の参照データ型が不確定な場合は、汎用で表す
汎用メソッド
汎用インタフェース
集合調査のテクニック
唯一必要ですか?
必要:Setは順序を指定する必要がありますか?必要:TreeSet不要:HashSetしかし、ストレージと一致する順序(順序):LinkedHashSet不要:Listは頻繁に削除する必要がありますか?必要:LinkedList不要:ArrayList
各容器の構造と所属体系をどのように記録しますか?名前を見る
List |–ArrayList |–LinkdeList
Set |–HashSet |–TreeSet
Foreachループループコレクション
このような遍歴方式は,一定の限界があり,遍歴しかできず,集合中の要素を操作することができない.
Mapを巡るときは、mapをsetに変換する必要があります
関数可変パラメータ
呼び出し:newAdd(5,1,2,3)またはnewAdd(5)...
public static int newAdd(int … arr){
}
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){
}