Javaの集合フレームワーク


アプリケーションの開発中に、複数のオブジェクトを格納し、必要に応じて取り出す必要がある場合があります.
この場合,最も簡単な方法は配列を利用することである.
ただし、配列は作成時にサイズが決定されるため、+オブジェクトを削除するとインデックスが空になる可能性があるため、不特定の複数のオブジェクトを格納するために使用できません.
Javaではjavaです.これらの問題はutilパッケージに集合インタフェースを提供することによって解決される.

(Collection)List:逐次記憶と重複記憶
(Collection)Set:順序なし、重複なし
Map:鍵と値をペアとして保存し、鍵は重複しません.

リストセット


オブジェクトはインデックスで管理されるため、オブジェクトを格納すると自動的にインデックスが作成され、オブジェクトの検索と削除が可能になります.
オブジェクト自体を格納するのではなく、オブジェクトの番号を参照します.

List<String> list = ...;
list.add("홍길동"); // 맨끝에 객체추가
list.add(1, "이영진"); // 지정된 인덱스에 객체 삽입
String str = list.get(1); // 인덱스로 객체 찾기
list.remove(0); // 인덱스로 객체 삭제
list.remove("이영진"); // 객체삭제
ListインタフェースはGenericタイプです.
特定のタイプは、インプリメンテーションオブジェクトを作成するときに決定されます.

ArrayList


Listにおけるインタフェース実装クラス
配列との違いは、生成時にサイズが固定され、使用中にサイズを変更できるかどうかです.
ArrayListが容量を超えている場合、オブジェクトが入ると自動的に容量が増加し、配列は増加しません.
List<String> list = new ArrayList<String>();
// 기본생성자로 생성하면 10개의객체를 저장할수있는 초기용량이 생성됨
オブジェクトを追加すると0から格納され、特定のインデックスが削除されると、後のインデックスから最後のインデックスまで1が前に引かれます.
また、特定のインデックスを挿入すると、そのインデックスから最後のインデックスまで1が押されます.
したがって、頻繁にオブジェクトを削除または挿入する場合は、これを推奨しません.
ただし、インデックス検索や最後にオブジェクトを追加する場合、ArrayListは良い選択です.

Vector


VectorはArrayListと同じ内部構造を持つ.
では、なぜ存在するのでしょうか.
Vectorは同期メソッドで構成されています.
マルチスレッドでは、これらのメソッドを同時に実行できません.
したがって、あるスレッドは、別のスレッドを実行するために完了する必要があり、マルチスレッド環境でオブジェクトを安全に追加および削除できます.
これをThreadセキュリティと呼びます.
これはHashTableとHashMapの違いに似ています.
HashTableもsynchronized法で構成されている.

LinkedList


ArrayListの使用方法は同じですが、内部構造は全く違います.
LinkedListは隣接参照をリンクし,チェーンのように管理する.
LinkedListでは、特定のインデックス内のオブジェクトを削除できます.
削除したオブジェクトとの接続を解除し、再接続するだけです.
ArrayListと比較して、オブジェクトの削除/挿入を頻繁に行う場合にパフォーマンスが向上します.
public class LinkedListExample {

    public static void main(String[] args) {

        List<String> list1 = new ArrayList<>();
        List<String> list2 = new LinkedList<>();

        long startTime;
        long endTime;

        startTime = System.nanoTime();
        for (int i = 0; i < 10000; i++) {
            list1.add(0, String.valueOf(i));
        }

        endTime = System.nanoTime();
        System.out.println("ArrayList 걸린시간 :" + (endTime-startTime)  + "ns");
        startTime = System.nanoTime();

        for (int i = 0; i < 10000; i++) {
            list2.add(0, String.valueOf(i));
        }

        endTime = System.nanoTime();
        System.out.println("LinkedList 걸린시간 :" + (endTime-startTime)  + "ns");

    }
}

ArrayListは末尾から順に追加・削除が早い.
途中で追加または削除する場合は、前後のリンク情報のLinkedListを変更するだけでより高速です.
ArrayListは後のすべてのインデックスの時間を増加または減少させる必要があるため、処理速度が遅い.

しゅうごう


Set Collectionは格納順序を維持できません.
また、重複して格納することはできないため、nullは1つしか格納できません.
数学の集合概念と似ており,繰り返しは許されず,集合にも順序がない.
SetインタフェースもGeneric型と類似している.
Set<String> set =...;
set.add("이영진");
set.remove("이영진"); 
Setコレクションには、インデックスによってオブジェクトを検索およびインポートする方法はありません.
オブジェクト全体を繰り返しインポートするリピーター提供.
Set<String> set =...;
Iterator<String> iterator = set.iterator();
I奇形機インタフェースで宣言する方法
booleanhasNext():インポートするオブジェクトがある場合はtrue、ない場合はfalseを返します.
next():コレクションからオブジェクトを取得する
void remove():Setコレクションからオブジェクトを削除します.
反復器を使うhasNext()の方法をよく見ますが、以下のようになります.
Set<String> set =...;
Iterator<String> iterator = set.iterator();
  
while(iterator.hasNext()) {
 	 String str = iterator.next(); 
  } // false가 반환될떄까지, 저장된 객체 수만큼 루핑한다. 
  

HashSet


同じオブジェクトを繰り返し保存しません.
ここで、同じオブジェクトは、同じインスタンスだけでなく、オブジェクトのhaseCode()メソッドを呼び出すことによってハッシュコードを得る.
格納されたオブジェクトのハッシュコードと比較すると、ハッシュコードが同じであれば、それらは同じオブジェクトであるとみなされる.

Properties


Hashtableのサブクラス.
Hashtableでは、異なるタイプのキーと値を指定できます.プロパティは、キーと値をStringタイプのセットに制限します.
主に~.properties形式のファイルを読み込むために使用されます.
国際化、データベース接続、アプリケーション・オプションなどの機能を提供します.
しばしば見かける.

同期および並列処理用のセット


コレクションフレームワークのほとんどのクラスは、単一スレッド環境で使用できるように設計されています.
Vector、HashTableは同期方式で構成されているため、マルチスレッド環境では要素を安全に処理できるが、ArrayList、HashSet、HashMapは同期方式で構成されているため安全ではない.
このため、非同期メソッドを同期メソッドとしてパッケージする方法が提供される.
List <T> list = Collections.synchronizedList(new ArrayList<T>());
Set<E> set = Collections.synchronizedSet(new HashSet<E>()); 
Map<K,V> map = Collections.synchronizedMap(new HashMap<K,V>());
これらは、マルチスレッド環境で要素を安全に処理するのに役立ちますが、迅速に処理することはできません.同期後、他のスレッドは待機状態になるためです.
マルチスレッドはまた、カルテ上でセット内の要素を処理するためのセットを提供することもできる.
CouncurrentHashMap,CouncurrentLinkedQueue.

义齿


sort:単一スレッド
parallelsort:sortよりずっと速いです.
このセクションでは、追加のドキュメントを表示し、後で追加する必要があります.