コレクションフレームワーク+事前知識
コレクションフレーム
コンテナとも呼ばれるJavaコレクションフレームワークは、java.utilパッケージで定義されたインターフェイスとその実装クラスのセットです。
- コレクション:オブジェクトのセットを保存および管理するために使用されます。これらのオブジェクトは一般に要素と呼ばれます
- セット:要素を繰り返すことはできず、検索/検索のセマンティクスはその背後に暗黙的に含まれています
- SortedSet:繰り返すことができない順序付けられた要素のセット
- リスト:線形構造
- キュー:キュー
- Deque:Deque
- セット:要素を繰り返すことはできず、検索/検索のセマンティクスはその背後に暗黙的に含まれています
- マップ:Key-Value-Pair、これは検索/検索セマンティクスを意味します
- SortedMap:キーと値のペアの順序付けられたセット
コレクションの背後にはデータ構造があり、データの記述と編成の方法が異なります。その結果、非常に多くのデータ構造と非常に多くのコレクションがあります。
コレクションの意味:
- 成熟したコレクションフレームワークを使用すると、効率的で安定したコードを便利かつ迅速に作成できます。
- その背後にあるデータ構造の知識を学ぶことは、各コレクションと使用シナリオの長所と短所を理解するのに役立ちます
収集ツールを使用する:
コレクションの一般的なメソッドの説明
毎回保存単一のデータ
メソッドシグネチャ | 説明 |
---|---|
boolean add(E e) | 要素eをコレクションに入れます |
void clear() | コレクション内のすべての要素を削除します |
ブールisEmpty() | コレクションに要素がないかどうかを確認します。これは一般に空のコレクションと呼ばれます |
boolean remove(Object e) | 要素eがセットに含まれている場合は、そのうちの1つを削除します |
int size() | コレクション内の要素の数を返します |
Object [] toArray() | コレクション内のすべての要素を含む配列を返します |
例:
在这里插入代码片
一般的なメソッドの説明をマップする
毎回保存キーと値のペア、<k、v>
メソッドシグネチャ | 説明 |
---|---|
V get(Object k) | 指定されたkに従って対応するvを見つけます |
V getOrDefault(Object k、V defaultValue) | 指定されたkに従って対応するvを見つけ、見つからない場合はデフォルト値に置き換えます。 |
V put(Kキー、V値) | 指定されたkvをマップに入れます |
ブールcontainsKey(オブジェクトキー) | キーを含めるかどうかを決定する |
ブールcontainsValue(オブジェクト値) | 値を含めるかどうかを決定する |
Set <Map.Entry <K、V >> entrySet() | すべてのキーと値のペアを返します |
ブールisEmpty() | 空かどうかを確認します |
int size() | キーと値のペアの数を返します |
マップがデータを保存する方法:マップにデータを保存する
順序は、必ずしも印刷の順序である必要はありません。これは、要素をマップに保存するときに、要素が順番に保存されないためです。独自の方法でデータを保存および保存します。使用することですマッピング用のハッシュ関数。
ジェネリック医薬品の紹介
最初に例を見てみましょう
class MyArrayList {
public Object[] elem;
public int usedsize;
public MyArrayList() {
this.elem = new Object[10];
}
public void add(Object data) {
this.elem[this.usedsize] = data;
this.usedsize++;
}
public Object get(int pos) {
return this.elem[pos];
}
}
public class Work1 {
public static void main(String[] args) {
MyArrayList arr = new MyArrayList();
arr.add(1);
arr.add(16.5);
arr.add("hello");
String str = (String)arr.get(2);
System.out.println(str);
}
}
このシーケンステーブルに格納されているデータをObjectクラスに設定すると、このシーケンステーブルはさまざまなタイプのデータを格納できますが、これはプログラムには強力すぎます。ジェネリックを使用して順序を制限できます。データ型これはテーブルに格納できるため、特定のデータ型のみを配列に格納する必要があります。
class MyArrayList <T> {
public T[] elem;
public int usedsize;
public MyArrayList() {
this.elem = (T[])new Object[10];
}
public void add(T data) {
this.elem[this.usedsize] = data;
this.usedsize++;
}
public T get(int pos) {
return this.elem[pos];
}
}
public class Work1 {
public static void main(String[] args) {
MyArrayList<String> arr1 = new MyArrayList<>(); //这时顺序表中只能放String类型数据
arr1.add(1); //错误,类型不匹配
arr1.add(16.5); //错误,类型不匹配
arr1.add("hello"); //正确,字符串型数据
MyArrayList<Integer> arr2 = new MyArrayList<>(); //整型
MyArrayList<Float> arr3 = new MyArrayList<>(); //浮点型
}
}
予防:
- プレースホルダーを表し、現在のクラスがジェネリッククラスであることを示します
- 単純型はジェネリック型のパラメーターとして使用できず、パッケージングクラスを使用する必要があります
ArrayList<int> arr = new ArrayList<>(); //错误
ArrayList<Integer> arr = new ArrayList<>(); //正确
- ジェネリック型の新しい配列はできません
this.elem = new T[10];
- ジェネリックはコンパイル時にのみ存在し、プログラムの実行中はジェネリックの概念はありません。
ジェネリックの意味:
- 自動型チェック
- 自動型変換
ジェネリック消去メカニズム:
ジェネリックがコンパイルされるとき、指定された型を置き換えるのではなく、指定された型をチェックします。
つまり、コンパイル時に、指定された型が型チェックと
コンパイルに使用されます。の場合、型消去が実行されます。 、およびコンパイルは、ジェネリック型を置き換えるのではなく、Objectクラスとして消去します。
包装
基本的なデータ型と、ラッパークラスパッキング間の対応する関係
:
int a = 10;
Integer integer1 = new Integer(a); //显示的装包
System.out.println(integer1);
Integer integer2 = Integer.valueOf(a); //显示装包
System.out.println(integer2);
Integer integer3 = a; //自动装包,其实也调用了Integer.valueOf()
開封:
Integer i = 10;
int a1 = i; //自动拆箱
System.out.println(a1);
int a2 = i.intValue(); //显示拆箱
System.out.println(a2);
double d = i.doubleValue();
System.out.println(d);