4 日目: Java の基本的な復習 (コレクション)

地図

地図

        形式: <K,V>、K キー、V 値; キーを値にマップし、重複キーを含めることはできません。各キーは 1 つの値にのみマップでき、重複キーが入力されると置き換えられます。

        作成: ポリモーフィックな方法で。

        具体的に:HashMap Map<String,Object> map = new HashMap<String,Object>();

ツリーマップ

        要素のサイズを比較できる Map コレクションは、入力キーのサイズを並べ替えます。要素の自然な並べ替えを使用するか、コレクション内のカスタム比較コンテナーを使用して並べ替えることができます。

特徴:

        重複キーは許可されていません。

        キーと値の両方に null を挿入できます。

        要素を並べ替えることができます。

        順序付けされていないコレクション。挿入とトラバーサルの順序に一貫性がありません。

基本操作:

1、遍历元素
Set<Map.Entry<String,Integer>> entrySet = treeMap.entrySet();
2、获取所有key
Set<String> keySet = treeMap.keySet();
3、获取所有value
Collection<Integer> valueList = treeMap.values();
4、获取集合内第一个元素
String firstKey = treeMap.firstKey();
5、获取集合内最后一个元素
 String lastKey =treeMap.lastKey();

並び替え:

        自然な要素の並べ替え: put() メソッドが呼び出されると、入力要素が Comparable 型のオブジェクトに変換されるため、比較する要素は Comparable インターフェースを実装する必要があります。

TreeMap<Integer,String> treeMapFirst = new TreeMap<Integer, String>();
treeMapFirst.put(1,"huangqiuping");
treeMapFirst.put(6,"huangqiuping");
treeMapFirst.put(3,"huangqiuping");
System.out.println(treeMapFirst.toString());
结果:{1=huangqiuping, 3=huangqiuping, 6=huangqiuping}

        カスタム コンパレータを使用して比較する: treeMap オブジェクトを作成するときは、カスタム コンパレータ オブジェクトを treeMap 構築メソッドに渡す必要があります; Comparator インターフェイスを実装し、比較メソッド compare(to1,to2) を実装する必要があります。

public class SortedTestComparator implements Comparator<SortedTest> {
    //自定义比较器:实现compare(To1,To2)方法:
    public int compare(SortedTest sortedTest1, SortedTest sortedTest2) {
        int num = sortedTest1.getAge() - sortedTest2.getAge();
        if(num==0){//为0时候,两者相同:
            return 0;
        }else if(num>0){//大于0时,后面的参数小:
            return 1;
        }else{//小于0时,前面的参数小:
            return -1;
        }
    }
}

ハッシュマップ

        KV キーと値のペアを格納するためのコレクションです。各要素の初期値は Null で、順序付けされていません。

        一般的なメソッド: put()、get()

        HashMap のデフォルトの長さは 16 で、拡張または初期化された長さは 2 の累乗でなければなりません (位置を決定するとき、衝突の確率は比較的低くなります)。

        置くプロセス:

                1. キーのハッシュ値を見つけて、添字を計算します
                2. 衝突がない場合は、直接バケットに入れます (衝突は、計算されたハッシュ値が同じであり、同じバケットに入れる必要があることを意味します)
                3. 衝突が発生した場合、連結リストの形式で後ろにリンクします。
                4. 連結リストの長さがしきい値 (TREEIFY THRESHOLD==8) を超えた場合、連結リストを赤黒ツリーに変更します。連結リストの長さが 6 未満の場合、赤黒木を連結リストに戻します。 5. ノードの場合
                古い値がすでに存在する場合は置き換えます
                。 0.75)
                の場合、検索時にハッシュ メソッドを呼び出すためにリサイズ (容量の 2 倍の後に再配置) する必要があり、特定のキーに対応するハッシュを見つけてから、エントリ内の値の検索に進みます。

比較:

ハスプマップ ツリーマップ
故障中 整然とした
クエリの高速化 遅いクエリ
挿入、削除、検索に適しています 仕分けに適した
スレッドセーフではない スレッドセーフではない
出力は順不同です 出力はソートされます
配列 + 連結リスト + 赤黒木 赤黒い木

リスト

        List は Collection から継承されたインターフェイスであり、要素を繰り返したり、順番に格納したり (実際には挿入順に格納されます)、null を追加したりできます。

配列リスト

        基礎となるデータ構造は配列であり、クエリは高速で、追加と削除は低速で、スレッドセーフではなく、効率が高く、繰り返し要素を格納できます。ArrayList は、検索と最後に挿入または削除するのにより適しています。初期容量は10です。

一般的な方法:

方法 効果
追加(E) 要素を追加
set(int インデックス,E 要素) 指定された位置の要素を上書きします
remove(int インデックス) 指定位置の要素を削除する
get(int インデックス) 指定位置の要素を取得する
indexOf(オブジェクト o) 指定した場所のインデックスを取得する
イテレータ() イテレータを取得
サイズ() コレクションのサイズを取得する
isEmpty() コレクションが空かどうかを判断する
クリア() 空のコレクション
ストリーム() コレクションのストリームを作成する

リンクされたリスト

        基礎となるデータ構造は双方向のリンクされたリストであり、クエリが遅く、追加と削除が速く、スレッドに対して安全ではなく、効率が高く、重複する要素を格納できます; inkedList は途中から挿入または削除するのにより適しています

一般的な方法:

方法 効果
getFirst このリストの最初の要素を返します。
getLast このリストの最後の要素を返します。
最初の削除 このリストから最初の要素を削除して返します。
removeLast このリストから最後の要素を削除して返します。
追加 指定された要素をこのリストの末尾に追加します。
addFirst 指定された要素をこのリストの先頭に挿入します。
サイズ このリスト内の要素の数を返します。
クリア リストからすべての要素を削除します。この呼び出しが戻った後、リストは空になります。
含む このリストに指定された要素が含まれている場合は true を返します`
リスト反復子 リスト内の指定された位置から始まる、このリスト内の要素に対するリスト反復子を (適切な順序で) 返します。
ストリーム コレクションのストリームを作成する

ベクター

        基礎となるデータ構造は、配列、高速なクエリ、低速の追加と削除、スレッド セーフ (ほとんどのメソッドには synchronized キーワードが含まれています)、低効率、繰り返し要素を格納できます。マルチスレッドが関係する場合は、Vector を選択してください。

1、添加        addFirst()    addLast()
2、删除        removerFirst()    removerLast()
3、获取        getFirst()    getLast()

比較

配列リスト リンクされたリスト ベクター
安全でないスレッド、高効率 安全でないスレッド、高効率 スレッドセーフ、低効率
配列 連結リスト 配列
クエリは高速、追加と削除は低速 遅いクエリ、速い追加と削除 クエリは高速、追加と削除は低速

設定

        treeMap の主な機能はソートに使用され、LinkedHashSet の主な機能は FIFO が順序付きコレクション (先入れ先出し) であることを確認するために使用され、HashSet は保存されたデータの単なる一般的なコレクションです。

ハッシュセット

        最下層は二分木を採用し、要素は無秩序で独特であり、スレッドは安全ではなく、効率が高く、null要素を格納できます。

一般的な方法:

方法 効果
追加 要素を追加
containsKey(オブジェクト) 指定したキーがコレクションに含まれているかどうかを問い合わせる
remove(オブジェクト) 指定したキーを削除
イテレータ イテレータ
サイズ() コレクションのサイズを取得する
isEmpty() コレクションが空かどうかを判断する
クリア() 空のコレクション

LinkedHashSet

        最下層はリンク リストとハッシュ テーブルによって共同で実装されます. リンク リストは要素の順序が格納順序と一致することを保証し、ハッシュ テーブルは要素の一意性を保証します. スレッドは安全でも効率的でもありません。

一般的な方法:

方法 効果
追加 要素を追加
containsKey(オブジェクト) 指定したキーがコレクションに含まれているかどうかを問い合わせる
remove(オブジェクト) 指定したキーを削除
イテレータ イテレータ
サイズ() コレクションのサイズを取得する
isEmpty() コレクションが空かどうかを判断する
クリア() 空のコレクション

ツリーセット

        底层采用二叉树实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性;

常用方法:

方法 作用
add 添加元素
containsKey(Object) 查询集合中是否包含指定键
remove(Object) 删除指定键
iteartor 迭代器
size() 获取集合大小
isEmpty() 判断集合是否为空
clear() 清空集合
descendingIterator 倒叙遍历

比较

HashSet LinkedHashSet TreeSet
实现Set接口 实现Set接口 实现Set接口
线程不安全 线程不安全 线程不安全
添加、查询快 添加、修改、删除快;有序 只有需要对元素进行排序时使用
数组+链表+红黑树 哈希表+双向链表 红黑树
可以有null值 可以有null值 可以有null值

List与Set的区别

        1、List中元素可以重复,并且是有序的(按照插入的顺序进行存储);Set中的元素是不可重复的(重复元素会被覆盖掉),并且无序。

        2、List和Set都继承Collection接口;

        3、Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变

おすすめ

転載: blog.csdn.net/qq_35056891/article/details/126468364