記事のディレクトリ
前書き
コレクションはデータのグループであり、複数の要素を格納するデータ構造です。
コレクションのストレージ構造は、次の2つのタイプに分けられます。
- シーケンス構造
- チェーン構造
シーケンシャルストレージ
コレクション内の要素を特定の領域に順番に配置することをシーケンシャル構造と呼び、メモリに割り当てられたスペースは連続しています。
特徴:高いアクセス効率、低い挿入または削除効率。
チェーン収納
メモリに割り当てられたスペースは不連続で、次のように分割できます。
- 一方向チェーン収納
- 双方向チェーンストレージ
特徴:高い挿入および削除効率、低いアクセス効率
コレクションクラスとインターフェイス
コレクション関連のAPIはjava.utilパッケージに含まれています
コレクション
これはインターフェースであり、他のインターフェースから継承される主なものはリストとセットです。
リスト
配列リスト
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
// 访问元素
sites.get(1); // 访问第二个元素
// 修改元素
sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值
// 删除元素
sites.remove(3); // 删除第四个元素
// 计算大小
sites.size();
// 迭代数组列表
for (int i = 0; i < sites.size(); i++) {
System.out.println(sites.get(i));
}
for (String i : sites) {
System.out.println(i);
}
...
...
...
}
}
// [Google, Runoob, Taobao, Weibo]
ベクター
古いのでお勧めしません。
利点:スレッドセーフ
LinkedList
頻繁に挿入または削除する必要がある場合は、LinkedList、双方向チェーンストレージを使用してください
// 引入 LinkedList 类
import java.util.LinkedList;
LinkedList<E> list = new LinkedList<E>(); // 普通创建方法
或者
LinkedList<E> list = new LinkedList(Collection<? extends E> c); // 使用集合创建链表
import java.util.LinkedList;
public class RunoobTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
// 使用 addFirst() 在头部添加元素
sites.addFirst("Wiki");
// 使用 addLast() 在尾部添加元素
sites.addLast("Wiki");
// 使用 removeFirst() 移除头部元素
sites.removeFirst();
// 使用 removeLast() 移除尾部元素
sites.removeLast();
// 使用 getFirst() 获取头部元素
sites.getFirst()
// 使用 getLast() 获取尾部元素
sites.getLast()
// 迭代元素
for (int size = sites.size(), i = 0; i < size; i++) {
System.out.println(sites.get(i));
}
for (String i : sites) {
System.out.println(i);
}
System.out.println(sites);
}
}
セットする
- 順序付けされておらず(要素の順序は配置されている順序とは関係ありません)、要素はインデックスからアクセスできません。
- 繰り返し不可(繰り返し要素をセットに含めることはできません)。
HashSet
// 引入 HashSet 类
import java.util.HashSet;
public class RunoobTest {
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.contains("Taobao")
sites.remove("Taobao"); // 删除元素,删除成功返回 true,否则为 false
// 计算大小
sites.size()
// 迭代
for (String i : sites) {
System.out.println(i);
}
System.out.println(sites);
}
}
TreeSet
要素は、小さいものから大きいものへなど、並べ替えられます
// 引入 TreeSet 类
import java.util.TreeSet;
public class RunoobTest {
public static void main(String[] args) {
TreeSet<String> sites = new TreeSet<String>();
sites.add(2);
sites.add(5);
sites.add(1);
sites.add(3);
sites.add(4);
System.out.println(sites);
}
}
// [1, 2, 3, 4, 5]
並べ替え:
1。自然な順序
2.コンパレータを提供する
地図
保存されるのは、Key-Valueマッピングです。
HashMap
// 引入 HashMap 类
import java.util.HashMap;
public class RunoobTest {
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");
// 访问元素
Sites.get(3);
// 删除元素
Sites.remove(4);
// 删除所有键值对
Sites.clear();
// 计算大小
Sites.size();
// 输出 key 和 value
for (Integer i : Sites.keySet()) {
System.out.println("key: " + i + " value: " + Sites.get(i));
}
// 返回所有 value 值
for(String value: Sites.values()) {
// 输出每一个value
System.out.print(value + ", ");
}
System.out.println(Sites);
}
}
ハッシュ表
同期、スレッドセーフ(一般的には使用されません)
イテレータ
Java Iterator(イテレーター)はコレクションではなく、コレクションにアクセスするためのメソッドであり、ArrayListやHashSetなどのコレクションを反復するために使用できます。
イテレータの2つの基本操作は、next、hasNext、およびremoveです。
- it.next()を呼び出すと、イテレータの次の要素が返され、イテレータの状態が更新されます。
- it.hasNext()を呼び出して、コレクションに要素があるかどうかを確認します。
- it.remove()を呼び出して、イテレータによって返された要素を削除します。
// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;
public class RunoobTest {
public static void main(String[] args) {
// 创建集合
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
// 获取迭代器
Iterator<String> it = sites.iterator();
// 输出集合中的第一个元素
System.out.println(it.next());
}
}
収集サイトのすべての要素を出力します。
// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;
public class RunoobTest {
public static void main(String[] args) {
// 创建集合
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
// 获取迭代器
Iterator<String> it = sites.iterator();
// 输出集合中的所有元素
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
要素を削除します
// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(12);
numbers.add(8);
numbers.add(2);
numbers.add(23);
Iterator<Integer> it = numbers.iterator();
while(it.hasNext()) {
Integer i = it.next();
if(i < 10) {
it.remove(); // 删除小于 10 的元素
}
}
System.out.println(numbers);
}
}
収集ツール
コレクションを操作するためのツール
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
// 访问元素
Collections.addAll(sites, "123", "哈哈哈")
// 最大值
Collections.max(sites)
// 翻转
// 替换
// 交换
// 初始化
}
}
// [Google, Runoob, Taobao, Weibo]