Java学習ノート14コレクション

セットコレクション

Set インターフェイスは Collection インターフェイスを継承しており、コレクション内の要素を繰り返すことはできません。内容が重複する関連要素がある場合、元の要素は保持され、追加された要素はキャンセルされます。要素はランダムに読み込むことはできず、順序はありません。

 Set<Integer> set1 = new HashSet<>();
        //添加元素
        set1.add(1);
        set1.addAll(List.of(2, 3, 4, 5, 6, 1, 9));
        System.out.println(set1);
        //判断有没有元素
        System.out.println(set1.contains(5));
        System.out.println(set1.contains(7));
        System.out.println(set1.containsAll(List.of(1, 23, 3, 4)));
        System.out.println("=========================================");
        //删除元素
        System.out.println(set1.remove(9));
        System.out.println(set1);
        set1.clear();
        System.out.println(set1);

ここに画像の説明を挿入
HashSet コレクション内のオブジェクトは、次の 2 つのメソッドをオーバーライドする必要があります。equals() hashCode()これらのメソッドは、高度なツールを使用して自動的に生成できます。

パブリック クラス StudentsA1 は Comparable を実装します

 @Override
    public int compareTo(StudentsA1 o) {
    
    
        return id - o.id;
    }

    @Override
    public boolean equals(Object o) {
    
    
        if (this == o) {
    
    
            return true;
        }

        if (o == null || getClass() != o.getClass()) {
    
    
            return false;
        }
        StudentsA1 that = (StudentsA1) o;
        return id == that.id;
    }

Set コレクションが走査されますが、そのうちの 1 つをランダムに読み取ることができないか、すべてが読み取られています。

for (int i : set1) {
    
    
            System.out.println(i);
        }

ツリーセット

これは、順序付けされ、並べ替え可能で反復不可能な収集ツール クラスです。

		TreeSet<Integer> tree = new TreeSet<>();
        //加入的时候会自动排序
        tree.addAll(List.of(1, 2, 3, 44, 66, 44, 1, 2, 6, 5, 4));
        System.out.println(tree.size());
        System.out.println(tree);

        TreeSet<String> trees = new TreeSet<>();
        trees.addAll(List.of("java", "python", "c", "c++", "javascript", "book", "java"));
        System.out.println(trees.size());
        System.out.println(trees);

ここに画像の説明を挿入

照合順序は変更できます。

 TreeSet<String> trees = new TreeSet<>((a, b) -> b.compareTo(a));
        trees.addAll(List.of("java", "python", "c", "c++", "javascript", "book", "java"));
        System.out.println(trees.size());
        System.out.println(trees);

ここに画像の説明を挿入

Collectionsインターフェースのツールクラス

java.util.Collections ツール クラスは、配列オブジェクトのツール クラス Arrays ツール クラスと同等です。

ソート操作

  1.    reverse(List):反转List中元素的顺序
    
  2.    shuffle(List):对List集合元素进行随机排序
    
  3.    sort(List):根据元素的自然顺序对指定List集合元素按升序排序
    
  4.    sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
    

置換および検索操作

  1.    swap(List, int ,int ):将指定List集合中的 i 处元素 和 j 处元素进行交换
    
  2.    Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
    
  3.  Object max(Collection, Comparator):根据Comparator指定的顺序,返回给集合中的最大元素
    
  4.    Object min(Collection):根据元素的自然顺序,返回给定集合中的最小元素
    
  5.    Object min(Collection, Comparator):根据Comparator指定的顺序,返回给集合中的最大元素
    
  6.   int frequency(Collection,Object):返回指定集合中指定元素的出现次数
    
  7.   void copy(List dest,List src):将src中的内容复制到dest中
    注意复制的目标集合的长度必须大于源集合,否则会抛出空指针异常
    
  8. boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List对象的所有旧值
    
		List<Integer> list = new ArrayList<>(List.of(10,20,30,40,50,10));
        System.out.println(list);

        //洗牌
        Collections.shuffle(list);
        System.out.println(list);

        //升序
        Collections.sort(list);
        System.out.println(list);

        //降序
        Collections.sort(list,(a,b)->b-a);
        System.out.println(list);

        //集合位置交换,倒序
        Collections.reverse(list);
        System.out.println(list);

マップインターフェース

パブリック インターフェイス Map<K, V> { }

Map<K,V> の実装クラスは HashMap<K,V> であり、HashMap はインスタンス化、追加、判定、クリア、削除、置換を行います。

要素を追加する場合は、Kが繰り返された場合に上書きする新しい値を書き込みます。

K は、値が繰り返されない場合は上書きされません。

Map<String, String> map = new HashMap<>();
        map.put("bj", "北京");
        map.put("tj", "天津");
        map.put("hn", "河南");
        map.put("sh", "上海");
        //第一种遍历方式 keySet()方法返回Set集合
        Set<String> keys = map.keySet();
        for (String k : keys) {
    
    
            System.out.printf("map[\"%s\"] = %s%n", k, map.get(k));
        }

        System.out.println("1111111111111111111111111");

        //第二种遍历方式 values() 返回Collection<String> 集合
        Collection<String> values = map.values();
        for (String v : values) {
    
    
            System.out.println(v);
        }
        System.out.println("2222222222222222222222222222");
        //第三种遍历方式 entrySet() 返回一个Set<Map.Entry<String,String>> 集合
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> e : entries) {
    
    
            System.out.println(e.getKey());
            System.out.println(e.getValue());
        }
        System.out.println("333333333333333333333333333333");

        //第四种遍历方式 使用迭代器接口Iterator 接口
        Iterator<String> iterator = map.values().iterator();
        while (iterator.hasNext()) {
    
    
            System.out.println(iterator.next());
        }
        System.out.println("44444444444444444444444444444");
        Iterator<String> iterator1 = map.keySet().iterator();
        while (iterator1.hasNext()) {
    
    
            String key = iterator1.next();
            System.out.println(key);
            System.out.println(map.get(key));
        }
Map<String, String> map = new HashMap<>();
        map.put("bj", "北京");
        map.put("tj", "天津");
        map.put("hn", "河南");
        map.put("sh", "上海");
        System.out.println(map.size());
        //获取值
        System.out.println(map.get("hn"));
        //判断有没有值
        System.out.println(map.containsKey("hn"));
        //获取值
        if (map.containsKey("hn")) {
    
    
            System.out.println(map.get("hn"));
        }

HashMap はスレッド同期されていないため、スレッドの同時実行を使用する必要がある場合は、HashTable オブジェクトを使用できます。

Hashtable<K,V> は Map<K,V> を実装します

ハッシュテーブル: 最下位層もハッシュ テーブルであり、同期的であり、単一スレッドの組み合わせであり、低速なスレッドセーフ コレクションです。

HashMap: 基礎となる層もハッシュ テーブルですが、スレッドアンセーフなコレクションであり、高速なマルチスレッド コレクションです。

HashMap (および以前に学習したすべてのコレクション): null キー、null 値を格納できる

ハッシュテーブル: null キー、null 値は格納できません

ツリーマップ

TreeMap はスレッド同期されません。
  1. これは、順序付けされたキーと値のコレクションであり、赤黒ツリーを通じて実現されます。マップは、使用されるコンストラクターに応じて、キーの自然な順序に従って、またはマップの作成時に提供されたコンパレーターに従ってソートされます。

  2. これは AbstractMap から継承され、キーと値のコレクションにも格納されます。一連のナビゲーション方法をサポートできる NavigableMap インターフェイスが実装されました。

    たとえば、順序付けられたキーのセットを返します。Cloneable クローン インターフェイスを実装します。

		TreeMap<Integer, String> tm = new TreeMap<>();
        tm.put(1, "hello1");
        tm.put(2, "hello22");
        tm.put(3, "hello333");
        tm.put(10, "hello10");
        tm.put(4, "hello4444");
        System.out.println(tm);
        //.descendingMap() 返回一个Map 根据key降序,对原来的TreeMap没有改变
        Map<Integer, String> t2 = tm.descendingMap();
        System.out.println(tm);
        System.out.println(t2);

ここに画像の説明を挿入

方法 説明する
put(Kキー、V値) 指定された値をこのマップ内の指定されたキーに関連付けます
int サイズ() このコレクション内の要素の数を返します。
V 削除(オブジェクトキー)
putAll(地図マップ) 指定されたマッピング内のすべてのマッピングをこのマッピングにコピーします
コレクションの値()
keySet() を設定します 本質はTreeSetです
Map.Entry<K,V> エントリセット() Set<Map.Entry<K,V>> を返します
get(オブジェクトキー)
containsKey(オブジェクトキー)
firstEntry() コレクション内の最初の Map.Entry<K,V> を返します。
lastEntry()
firstKey() コレクションの最初の要素のキーを返します。
lastKey()
ブール値の削除(オブジェクトのキー、オブジェクトの値)
containsValue()

コレクション インターフェイスとツール クラスの概要:

コレクション インターフェイス
リスト インターフェイス
ArrayList 動的配列、順序付き挿入および削除速度が遅い、読み取り速度
LinkedList 二重リンク リスト、挿入および削除速度が速い、読み取り速度
ベクトル動的配列、スレッド セーフ
Set インターフェイス
HashSet 固有のコレクション、順序なし
TreeSet 固有のコレクション、はい、秩序ある

マップ インターフェイス
HashMap K、V キーと値のペアのコレクション、2 列のコレクション
TreeMap キーに応じた順序付きマップ コレクション
Hashtable HashMap と同じ、2 列のコレクション、スレッド セーフ

おすすめ

転載: blog.csdn.net/xxxmou/article/details/129190244