English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 基础教程

Javaのフロー制御

Java配列

Javaオブジェクト指向(I)

Javaオブジェクト指向(II)

Javaオブジェクト指向(III)

Java 例外処理

Javaリスト(List)

Java Queue(キュー)

Java Mapコレクション

Java Setコレクション

Java入出力(I/O)

Java Reader/Writer

Javaの他のトピック

Java アルゴリズム(アルゴリズム)

このチュートリアルでは、Javaコレクションフレームワークが提供する異なるアルゴリズムを例を用いて学習します。

Javaコレクションフレームワークは、データ構造に格納されている要素を処理するための様々なアルゴリズムを提供しています。

Java中的算法是静态方法,可用于对集合执行各种操作。

由于算法可用于各种集合,因此也称为通用算法

让我们看看集合框架中可用的不同方法的实现。

1.使用sort()排序

sort()集合框架提供的方法用于对元素进行排序。例如,

import java.util.ArrayList;
import java.util.Collections;
class Main {
    public static void main(String[] args) {
        //创建数组列表
        ArrayList<Integer> numbers = new ArrayList<>();
        //添加元素
        numbers.add(4);
        numbers.add(2);
        numbers.add(3);
        System.out.println("未排序的ArrayList: " + numbers);
        // 使用sort()方法
        Collections.sort(numbers);
        System.out.println("已排序的ArrayList: " + numbers);
    }
}

出力結果

未排序的ArrayList: [4, 2, 3]
已排序的ArrayList: [2, 3, 4]

在此,排序以自然顺序(升序)进行。 但是,我们可以使用Comparator接口自定义sort()方法的排序顺序。

詳細情報については、Java Sorting

2.使用shuffle进行洗牌

Java Collections框架的shuffle()方法用于打乱数据结构中出现的任何顺序。它的作用与排序正好相反。例如

import java.util.ArrayList;
import java.util.Collections;
class Main {
    public static void main(String[] args) {
        //创建数组列表
        ArrayList<Integer> numbers = new ArrayList<>();
        //添加元素
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("Sorted ArrayList: " + numbers);
        //使用shuffle()方法
        Collections.shuffle(numbers);
        System.out.println("使用shuffle的ArrayList: " + numbers);
    }
}

出力結果

Sorted ArrayList: [1, 2, 3]
使用shuffle的ArrayList: [2, 1, 3]

当我们运行程序时,shuffle()方法将返回随机输出。

洗牌算法主要用于需要随机输出的游戏中。

3.常规数据处理

在Java中,集合框架提供了可用于处理数据的不同方法。

  • reverse() - 反转元素的顺序

  • fill() - 用指定的值替换集合中的每个元素

  • copy() - 创建从指定源到目标的元素副本

  • swap() - 交换集合中两个元素的位置

  • addAll() - 将集合的所有元素添加到其他集合

例えば、

import java.util.Collections;
import java.util.ArrayList;
class Main {
    public static void main(String[] args) {
        //ArrayListを作成します
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        System.out.println("ArrayList1: " + numbers);
        // 使用 reverse()
        Collections.reverse(numbers);
        System.out.println("反转 ArrayList1: " + numbers);
        // 使用 swap()
        Collections.swap(numbers, 0, 1);
        System.out.println("ArrayList1 使用 swap(): " + numbers);
        ArrayList<Integer> newNumbers = new ArrayList<>();
        // 使用 addAll
        newNumbers.addAll(numbers);
        System.out.println("ArrayList2 使用 addAll(): "" + newNumbers);
        // 使用 fill()
        Collections.fill(numbers, 0);
        System.out.println("ArrayList1 使用 fill(): " + numbers);
        // 使用 copy()
        Collections.copy(newNumbers, numbers);
        System.out.println("ArrayList2 使用 copy(): " + newNumbers);
    }
}

出力結果

ArrayList1: [1, 2]
ArrayListを反転1: [2, 1]
ArrayList1 使用 swap(): [1, 2]
ArrayList2 使用 addAll(): [1, 2]
ArrayList1 使用 fill(): [0, 0]
ArrayList2 使用 copy(): [0, 0]

注意:copy()メソッドを実行する際には、2つのリストのサイズが同じである必要があります。

4.使用binarySearch()で検索

JavaコレクションフレームワークのbinarySearch()メソッドは指定された要素を検索します。指定されたコレクション内の要素の位置を返します。例えば、

import java.util.Collections;
import java.util.ArrayList;
class Main {
    public static void main(String[] args) {
        //ArrayListを作成します
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        // 使用 binarySearch()
        int pos = Collections.binarySearch(numbers, 3);
        System.out.println("3の位置は " + pos);
    }
}

出力結果

3の位置は 2

注意:binarySearch()メソッドを実行する前に、コレクションをソートする必要があります。

詳細情報については、Javaバイナリサーチ

5.組み合わせ

  • frequency() - 集合内に存在する要素の回数をカウント

  • disjoint() - 2つの集合が共通の要素を含むかどうかを確認する

例えば、

import java.util.Collections;
import java.util.ArrayList;
class Main {
    public static void main(String[] args) {
        //ArrayListを作成します
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(2);
        System.out.println("ArrayList1: " + numbers);
        int count = Collections.frequency(numbers, 2);
        System.out.println("Count of 2: " + count);
        ArrayList<Integer> newNumbers = new ArrayList<>();
        newNumbers.add(5);
        newNumbers.add(6);
        System.out.println("ArrayList2: " + newNumbers);
        boolean value = Collections.disjoint(numbers, newNumbers);
        System.out.println("2つのリストは交差しませんか? " + value);
    }
}

出力結果

ArrayList1: [1, 2, 3, 2]
Count of 2: 2
ArrayList2: [5, 6]
2つのリストは交差しませんか? true

6最大および最小要素の検索

Javaコレクションフレームワークのmin()とmax()メソッドは、最小および最大要素の検索に使用されます。例えば、

import java.util.Collections;
import java.util.ArrayList;
class Main {
    public static void main(String[] args) {
        //ArrayListを作成します
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        // 使用 min()
        int min = Collections.min(numbers);
        System.out.println("最小要素: " + min);
        // 使用 max()
        int max = Collections.max(numbers);
        System.out.println("最大要素: " + max);
    }
}

出力結果

最小要素: 1
最大要素: 3