Java学習ロードコレクション
概要概要
コレクションの定義
コレクションとは何ですか?セットとは、「いくつかの特定の要素で構成される全体」です。
概念的な観点から、コレクションと配列は非常に似ていますが、配列があるのになぜ収集する必要があるのでしょうか。
- 配列のサイズは、初期化後は不変です。
- 配列にはインデックス順にのみアクセスできます。
- …
配列には上記の欠点があるため、コレクションはJavaで提供されています。
コレクションの種類と特徴
java.util
パッケージに付属するJava標準ライブラリは、クラスのコレクションを提供します。Collection
これは、他のMap
すべてのコレクションクラスへのルートインターフェイスに追加されます。Javajava.util
パッケージは、主に次の3種類のコレクションを提供します。
List
:順序付きリストのコレクション。Set
:重複する要素がないことを保証するコレクション。Map
:Key-Valueで検索されたマッピングテーブルのコレクション。
Javaコレクションには次の特徴があります。
- 個別のインターフェースと実装クラス。
- 2つ目は、ジェネリックスをサポートすることです。コレクションに制限できるのは、同じデータ型の要素のみを配置できることです。
コレクションへのJavaアクセスは、統一されたウェイイテレーター(Iterator)を介して実現されます。これにより、上位層の使用のみを考慮でき、下位層のタイプは考慮できません。
1.Collection
インターフェースの一般的な方法
1.要素を追加します
-
add(int index,E element)
:コレクションに1つのアイテムを追加します。-
index
(オプションのパラメーター)-要素が挿入されるインデックス値を示します。 -
element
-挿入される要素。 -
戻り値:要素が正常に挿入された場合は、trueを返します。
インデックスが範囲外の場合、add()メソッドは
IndexOutOfBoundsException
例外をスローします。
-
-
addAll(int index, Collection c)
:-
index
(オプションのパラメーター)-要素が挿入されるインデックス値を示します。 -
c-挿入されるコレクション要素。
-
戻り値:要素が正常に挿入された場合は、trueを返します。
指定されたセットがnullの場合、過剰
NullPointerException
な異常。インデックスが範囲外の場合、add()メソッドは
IndexOutOfBoundsException
例外をスローします。
-
2.有効な要素の数を取得します
size()
:配列内の要素の数を返します。- 戻り値:配列内の要素の数を返します。
3.コレクションを空にします
clear()
:動的コレクション内のすべての要素を削除します。
4.それは空のセットですか
-
isEmpty()
:コレクションが空かどうかを判別します。-
戻り値:配列に要素がない場合は、trueを返します。
配列に要素がある場合は、falseを返します。
-
5.要素が含まれていますか?
-
contains(Object obj)
:要素がセットに含まれているかどうかを判断するために使用されます。-
obj
-検出される要素。 -
戻り値:指定された要素が動的配列に存在する場合、trueを返します。
指定された要素が動的配列に存在しない場合、falseが返されます。
-
-
containsAll(Collection c)
:指定したセットのすべての要素がセットに含まれているかどうかを確認します。collection
-パラメータを設定します。- 戻り値:コレクション内のすべての要素が動的配列に含まれている場合、trueを返します。
- 指定された要素を持つコレクションが
Collection
Throwsの互換性のない要素に存在する場合ClassCastException
; - コレクションにnull要素が含まれていて、null値の設定が許可されていない場合、
NullPointerException
例外がスローされます。
6.要素を削除します
-
remove(Object obj / int index)
:コレクション内の単一の要素を削除します。-
obj-削除する要素。obj要素が複数回出現する場合は、配列に最初に出現する要素を削除します。
-
index-削除する要素のインデックス値。
-
戻り値:要素が渡され、削除が成功した場合、trueを返します。
インデックス値が渡されると、削除された要素が返されます。
指定されたインデックスが範囲外の場合、メソッドは
IndexOutOfBoundsException
例外をスローします。
-
-
removeAll(Collection c)
:指定したコレクションに存在する動的配列要素を削除します。-
c-動的配列リストで削除される要素のコレクション。
-
戻り値:要素がコレクションから正常に削除された場合はtrueを返します。
指定された
Collection
要素を持つクラスに存在する要素のセットがクラスと互換性がない場合、ClassCastException
例外がスローされます。コレクションにnull要素が含まれ
Collection
ていて、指定されたものがnull要素を許可しない場合はNullPointerException
、例外をスローします。
-
7.交差点を見つける
-
retainAll(Collection c)
:ArrayList
これらの要素を指定されたコレクションに保持することもできます。-
コレクション-コレクションパラメータ;
-
戻り値:要素がコレクションから削除された場合はtrue。
指定された
Collection
互換性のないクラス要素に存在する要素のセットがClassCastException
例外としてスローされた場合。コレクションにnull要素が含まれ
Collection
ていて、指定された許可がない場合、null要素がスローされNullPointerException
ます。
-
8.セットが等しいかどうかを判断します
eauqls(Collection c)
:2つのセットが等しいかどうかを判別します。- コレクション-コレクションパラメータ;
- 戻り値:2つのセットが等しい場合はtrueを返します。
9.配列に変換します
-
toArray(T[] arr)
:コレクションオブジェクトを配列に変換します。-
T [] arr(オプションのパラメーター)-配列要素を格納するために使用される配列。
-
戻り値:パラメーターT [] arrがパラメーターとしてメソッドに渡されると、タイプTの配列が返されます。
パラメータが渡されない場合、オブジェクトタイプの配列が返されます。
-
10.コレクションオブジェクトのハッシュ値を取得します
hashCode()
:コレクションのハッシュ値を返します。
11.コレクションをトラバースします
iterator()
:Iterator
トラバースのセットについて、インターフェイスのインスタンスを返します。
次に、Iterator
コレクションを介してインターフェイスを使用します
Javaプログラムでは、Iterator
(イテレータ)はコレクションではなく、コレクションにアクセスするためのメソッドです。
GoFは、イテレータを次のように定義しています。オブジェクトの内部詳細を公開せずに、コンテナオブジェクトの各要素にアクセスするメソッドを提供します。
1.イテレータの一般的な方法
next()
:イテレータの次の要素を返し、イテレータの状態を更新します。hasNext()
:セットに要素があるかどうかを検出するために使用されます。ある場合はtrue、ない場合はfalse。remove()
:イテレータから返された要素を削除します。
2.イテレータを取得します
イテレータオブジェクトを使用してコレクションをトラバースするには、最初にイテレータを取得する必要があります。setiterator()
メソッドを呼び出してイテレータを取得できます。
// 创建集合
Collection collection = new ArrayList();
// 添加元素
collection.add(123);
collection.add("123");
collection.add(123L);
collection.add('A');
Iterator iterator = collection.iterator();
3.コレクションをトラバースします
コレクションに対して反復を使用することは、本質的に常にnext()
プロシージャのメソッドを呼び出します。コレクションの要素が後でトラバースされた場合、今回はnext()
メソッドを呼び出すとNoSuchElementException
エラーがスローされます。
したがって、推奨事項では次の方法を使用してトラバースします。
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
3つの一般的に使用されるコレクション
以下は、私たちの日常の開発で頻繁に使用される4つのコレクションです。
LinkedList
:このクラスはList
インターフェースを実装し、null(空)要素を許可します。主にリンクリストのデータ構造を作成するために使用されます。このクラスには同期メソッドがありません。複数のスレッドが同時に1つにアクセスする場合は、List
自分でアクセス同期を実装する必要があります。解決策はList
、作成時に同期を構築することList
です。ArrayList
:このクラスは実装されたList
インターフェイスでもあり、可変サイズの配列を実装します。これにより、要素にランダムにアクセスしてトラバースするときのパフォーマンスが向上します。このクラスも非同期であるため、マルチスレッドの状況では使用しないでください。その挿入と削除の効率は低いです。HashSet
:このクラスはSet
インターフェイスを実装し、重複する要素を許可せず、コレクション内の要素の順序を保証せず、nullの値を持つ要素を含めることができますが最大で1つです。HashMap
:HashMap
はハッシュテーブルであり、その格納されたコンテンツはキーと値のマッピングです。このクラスは、Map
インターフェイスを実装しHashCode
、キーの値に従ってデータを格納し、アクセス速度が高速です。レコードのキーは最大でnullに許可され、スレッドの同期はサポートされていません。
1.1。 LinkedList
例
import java.util.LinkedList;
public class Demo {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
System.out.println(sites); // [Google, Runoob, Taobao, Weibo]
}
}
一般的な方法
方法 | 説明 |
---|---|
public boolean add(E e) |
リンクリストの最後に要素を追加し、成功したかどうかを返します。成功はtrue、失敗はfalseです。 |
public void add(int index, E element) |
指定した位置に要素を挿入します。 |
public boolean addAll(Collection c) |
セットのすべての要素をリンクリストの最後に追加し、成功したかどうかを返します。成功はtrueで、失敗はfalseです。 |
public boolean addAll(int index, Collection c) |
セットのすべての要素をリンクリストの指定された位置に追加し、成功したかどうかを返します。成功はtrueで、失敗はfalseです。 |
public void addFirst(E e) |
要素がヘッドに追加されます。 |
public void addLast(E e) |
要素が最後に追加されます。 |
public boolean offer(E e) |
リンクリストの最後に要素を追加し、成功したかどうかを返します。成功はtrue、失敗はfalseです。 |
public boolean offerFirst(E e) |
先頭に要素を挿入し、成功したかどうかを返します。成功はtrueで、失敗はfalseです。 |
public boolean offerLast(E e) |
最後に要素を挿入し、成功したかどうかを返します。成功はtrueで、失敗はfalseです。 |
public void clear() |
リンクリストをクリアします。 |
public E removeFirst() |
最初の要素を削除して返します。 |
public E removeLast() |
最後の要素を削除して返します。 |
public boolean remove(Object o) |
要素を削除して、成功したか、成功したか、失敗したかを返します。 |
public E remove(int index) |
指定した位置の要素を削除します。 |
public E poll() |
最初の要素を削除して返します。 |
public E remove() |
最初の要素を削除して返します。 |
public boolean contains(Object o) |
要素が含まれているかどうかを確認します。 |
public E get(int index) |
指定された位置にある要素を返します。 |
public E getFirst() |
最初の要素を返します。 |
public E getLast() |
最後の要素を返します。 |
public int indexOf(Object o) |
指定された要素が最初に出現するインデックスを前から後ろに見つけます。 |
public int lastIndexOf(Object o) |
指定された要素の最後の出現のインデックスを見つけます。 |
public E peek() |
最初の要素を返します。 |
public E element() |
最初の要素を返します。 |
public E peekFirst() |
ヘッド要素を返します。 |
public E peekLast() |
テール要素を返します。 |
public E set(int index, E element) |
指定した位置にエレメントをセットしてください。 |
public Object clone() |
リストのクローンを作成します。 |
public Iterator descendingIterator() |
逆イテレータを返します。 |
public int size() |
リンクリスト内の要素の数を返します。 |
public ListIterator listIterator(int index) |
指定された位置から最後までのイテレータを返します。 |
public Object[] toArray() |
リンクリスト要素の配列を返します。 |
public T[] toArray(T[] a) |
リンクリスト要素から変換された配列を返します。 |
2.2。 ArrayList
例
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
System.out.println(sites); // [Google, Runoob, Taobao, Weibo]
}
}
一般的な方法
方法 | 説明 |
---|---|
add() |
の指定された位置ArrayList に挿入された要素 |
addAll() |
添加集合中的所有元素到 ArrayList 中 |
clear() |
删除 ArrayList 中的所有元素 |
clone() |
复制一份 ArrayList |
contains() |
判断元素是否在 ArrayList |
get() |
通过索引值获取 ArrayList 中的元素 |
indexOf() |
返回 ArrayList 中元素的索引值 |
removeAll() |
删除存在于指定集合中的 ArrayList 里的所有元素 |
remove() |
删除 ArrayList 里的单个元素 |
size() |
返回 ArrayList 里元素数量 |
isEmpty() |
判断 ArrayList 是否为空 |
subList() |
截取部分 ArrayList 的元素 |
set() |
替换 ArrayList 中指定索引的元素 |
sort() |
对 ArrayList 元素进行排序 |
toArray() |
将 ArrayList 转换为数组 |
toString() |
将 ArrayList 转换为字符串 |
ensureCapacity() |
设置指定容量大小的 ArrayList |
lastIndexOf() |
返回指定元素在 ArrayList 中最后一次出现的位置 |
retainAll() |
保留 ArrayList 中在指定集合中也存在的那些元素 |
containsAll() |
查看 ArrayList 是否包含指定集合中的所有元素 |
trimToSize() |
将 ArrayList 中的容量调整为数组中的元素个数 |
removeRange() |
删除 ArrayList 中指定索引之间存在的元素 |
replaceAll() |
将给定的操作内容替换掉数组中每一个元素 |
removeIf() |
删除所有满足特定条件的 ArrayList 元素 |
forEach() |
遍历 ArrayList 中每一个元素并执行特定操作 |
3. HashSet
示例
import java.util.HashSet;
public class Demo {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Runoob"); // 重复的元素不会被添加
sites.remove("Taobao"); // 删除元素,删除成功返回 true,否则为 false
System.out.println(sites); // [Google, Runoob, Zhihu]
}
}
常用方法
方法 | 描述 |
---|---|
add() |
添加元素 |
remove() |
删除元素 |
clear() |
删除所有元素 |
contains() |
是否包含指定元素 |
isEmpty() |
判断是否为空 |
size() |
获取集合中元素个数 |
4. HashMap
示例
import java.util.HashMap;
public class Demo {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(Sites); // {1=Google, 2=Runoob, 3=Taobao, 4=Zhihu}
}
}
常用方法
方法 | 描述 |
---|---|
clear() |
删除 HashMap 中的所有键/值对 |
clone() | 复制一份 HashMap |
isEmpty() |
判断 HashMap 是否为空 |
size() |
计算 HashMap 中键/值对的数量 |
put() |
将键/值对添加到 HashMap 中 |
putAll() |
将所有键/值对添加到 HashMap 中 |
putIfAbsent() |
如果 HashMap 中不存在指定的键,则将指定的键/值对插入到 HashMap 中。 |
remove() |
删除 HashMap 中指定键 key 的映射关系 |
containsKey() |
检查 HashMap 中是否存在指定的 key 对应的映射关系。 |
containsValue() |
检查 HashMap 中是否存在指定的 value 对应的映射关系。 |
replace() |
替换 HashMap 中是指定的 key 对应的 value。 |
replaceAll() |
将 HashMap 中的所有映射关系替换成给定的函数所执行的结果。 |
get() |
获取指定 key 对应对 value |
getOrDefault() |
获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值 |
forEach() |
对 HashMap 中的每个映射执行指定的操作。 |
entrySet() |
返回 HashMap 中所有映射项的集合集合视图。 |
keySet() |
返回 HashMap 中所有 key 组成的集合视图。 |
values() |
返回 HashMap 中存在的所有 value 值。 |
merge() |
添加键值对到 HashMap 中 |
compute() |
对 HashMap 中指定 key 的值进行重新计算 |
computeIfAbsent() |
对 HashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 HashMap 中 |
computeIfPresent() |
对 HashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 HashMap 中。 |