banner
Onei

Onei

github
nintendo switch
discord server
steam
pixiv
bento
follow

集合

🗃️ コレクション#

いくつかの方法#

  • add()
  • addAll()
  • remove()
  • removeAll()
  • clear()
  • isEmpty()
  • contains()

contains と remove は equals メソッドを呼び出します

コレクションに基本データ型を格納する場合、必ず基本型のラッパークラスにボクシングする必要があります

変更およびクエリのメソッドは提供されていません

class-and-interface-hierarchy

🔍 イテレータ#

イテレータ

主に反復処理に使用され、イテレータを使用するとデータ構造の差異を隠すことができます

  • hasNext()
  • next()
  • remove()

イテレータが作成されると、コレクションは変更できなくなります。変更する場合は、イテレータを再生成する必要があります

拡張 for ループ#

イテレータの省略形です。削除もできません

🐾 リスト#

順序があり、重複が可能です

ArrayList#

内部はオブジェクト配列で、クエリと変更の効率が高いです

  • add(index,items)
  • set(index,items)
  • size()

LinkedList#

内部は双方向リンクリストで、ランダムな追加と削除の効率が高いです

  • add(index,items)
  • set(index,items)
  • size()

🍊 セット#

順不同(データの追加と取り出しの順序は保証されません)
重複不可(重複した場合は追加されません)

TreeSet#

内部はTreeMapです

TreeMapの内部は赤黒木で、追加された要素は自動的に一定の形式でソートされます

TreeMapに追加されるデータには比較器があります

したがって、比較器のないオブジェクトやカスタムオブジェクトを追加しようとするとエラーが発生します。また、比較には比較が必要なため、同じ型のデータしか追加できません

  • 数字の場合、昇順
  • 文字列の場合、各文字の ASCII コード
  • 日付の場合、自然な日付

HashSet#

内部はHashMapK部分です

HashMapの内部はハッシュテーブルです

🤼‍♀️ Comparable#

比較器。追加されるTreeSetの要素は Comparable インターフェースを実装し、インターフェースのcompareTo()メソッドをオーバーライドする必要があります。
compareTo()メソッドの戻り値はソートルールを表します。
要素を追加すると、コレクション内の要素が比較されるため、要素オブジェクトのcompareTo()メソッドが呼び出されます。
==0の場合、重複しているため追加されません。
<0の場合、追加する要素が小さいため、前に配置されます。
>0の場合、追加する要素が大きいため、後ろに配置されます。

import java.util.TreeSet;

public class Tree {
  public static void main(String[] args) {
    TreeSet<Object> tree = new TreeSet<>();
    tree.add(new User("张三",18));
    tree.add(new User("李四",13));
    tree.add(new User("王五",32));
    tree.add(new User("赵六",11));
    System.out.println(tree);
  }
}

class User implements Comparable {
  private String name;
  private int age;

  public User() {
  }

  public User(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  @Override
  public String toString() {
    return "User [name=" + name + ", age=" + age + "]";
  }

  @Override
  public int compareTo(Object o) {
    if (o instanceof User) {
      User u = (User) o;
      // this.getAge() - u.getAge() > 1で昇順ソート
      return this.getAge() - u.getAge();
    }
    return 0;
  }
}

🍭 Comparator#

比較器クラス。追加する要素はこのインターフェースを実装する必要はありません

Integerクラスにはデフォルトの昇順比較メソッドがあります。降順にしたい場合は、Comparatorインターフェースを実装してソートルールを再定義するか、ソートできないObjectオブジェクト Comparableインターフェースを実装していない)TreeSetに保存する場合は、比較のためにComparatorが必要です。
保存する要素がソートできない(Comparableインターフェースを実装していない)場合や、ソートルールが要件に合わない場合は、Comparatorインターフェースを実装し、compare()メソッドをオーバーライドしてソートします。

Comparator比較器とComparable比較器が同時に存在する場合、Comparatorの優先度が高い

ここでは、変更には閉じ、拡張には開いています

匿名クラスと同時に使用する#

import java.util.Comparator;
import java.util.TreeSet;

@SuppressWarnings("all")
public class UnNamed {
  public static void main(String[] args) {
    // TreeSet<Object> tree = new TreeSet<>(new MyComparator());
    // 匿名クラスは比較器でよく使用されます
    TreeSet<Object> tree = new TreeSet<>(new Comparator() {
      @Override
      public int compare(Object o1, Object o2) {
        if (o1 instanceof Integer && o2 instanceof Integer) {
          // o1は追加する要素です
          // System.out.println(o1);
          // o2はコレクション内の要素です
          // System.out.println(o2);

          Integer i1 = (Integer) o1;
          Integer i2 = (Integer) o2;
          // 10-9で降順に並べ替え
          return i2 - i1;
        }
        return 0;
      }
    });
    tree.add(11);
    tree.add(7611);
    tree.add(1);
    tree.add(100);
    tree.add(660);
    tree.add(98);
    System.out.println(tree);
  }
}

class MyComparator implements Comparator {
  @Override
  public int compare(Object o1, Object o2) {
    if (o1 instanceof Integer && o2 instanceof Integer) {
      // o1は追加する要素です
      // System.out.println(o1);
      // o2はコレクション内の要素です
      // System.out.println(o2);

      Integer i1 = (Integer) o1;
      Integer i2 = (Integer) o2;
      // 10-9で降順に並べ替え
      return i2 - i1;
    }
    return 0;
  }
}

〽️ リストのソート#

Collections.sort(list) ソートメソッド
void sort(Comparator<? super E> c)Comparatorオブジェクトを渡してListのソートメソッドを使用することもできます

🔗 ハッシュテーブル#

キーと値のマッピング関係を保存するために使用され、保存方法は配列にリンクリストを保存することです。ハッシュの衝突問題を解決するために使用されます
リンクリストのノードには 4 つの属性があります:

  • ハッシュ値
  • キー
  • 次のポインタ

ハッシュテーブル

✔️ ジェネリック#

型チェック

ジェネリックを使用しない場合、コレクションには任意の型のデータを保存でき、データはすべてObject型にキャストされます
欠点:取得するとObject型のデータが得られ、オブジェクト固有の属性を使用する場合はダウンキャストが必要です

ジェネリックを使用すると、コレクションには単一の型のデータのみを保存できます
利点:データの型が一致しているため、ダウンキャストは必要ありません
欠点:単一のデータ型のみを保存できます。また、ジェネリック型には基本型を書くことはできません

public class Generic {
	public static void main(String[] args) {
		MyClass myClass = new MyClass();
		myClass.method(1);
		myClass.method("xx");
		MyClass<String> mm = new MyClass<String>();
		mm.m1("xxx");
		// mm.m1(123);
	}
}

// ジェネリックを設定した場合、データ型を渡さない場合はデフォルトでObject型になります
class MyClass<T> {
	public void method(T obj) {
		System.out.println(obj);
	}
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。