Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊(duì)列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java Algorithms(算法)

在本教程中,我們將借助示例學(xué)習(xí)Java集合框架提供的不同算法。

Java集合框架提供了各種算法,可用于處理存儲(chǔ)在數(shù)據(jù)結(jié)構(gòu)中的元素。

Java中的算法是靜態(tài)方法,可用于對(duì)集合執(zhí)行各種操作。

由于算法可用于各種集合,因此也稱為通用算法

讓我們看看集合框架中可用的不同方法的實(shí)現(xiàn)。

1.使用sort()排序

sort()集合框架提供的方法用于對(duì)元素進(jìn)行排序。例如,

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {

        //創(chuàng)建數(shù)組列表
        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);

    }
}

輸出結(jié)果

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

在此,排序以自然順序(升序)進(jìn)行。 但是,我們可以使用Comparator接口自定義sort()方法的排序順序。

要了解更多信息,請(qǐng)?jiān)L問(wèn)Java Sorting。

2.使用shuffle進(jìn)行洗牌

Java Collections框架的shuffle()方法用于打亂數(shù)據(jù)結(jié)構(gòu)中出現(xiàn)的任何順序。它的作用與排序正好相反。例如

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {

        //創(chuàng)建數(shù)組列表
        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);

    }
}

輸出結(jié)果

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

當(dāng)我們運(yùn)行程序時(shí),shuffle()方法將返回隨機(jī)輸出。

洗牌算法主要用于需要隨機(jī)輸出的游戲中。

3.常規(guī)數(shù)據(jù)處理

在Java中,集合框架提供了可用于處理數(shù)據(jù)的不同方法。

  • reverse() - 反轉(zhuǎn)元素的順序

  • fill() - 用指定的值替換集合中的每個(gè)元素

  • copy() - 創(chuàng)建從指定源到目標(biāo)的元素副本

  • swap() - 交換集合中兩個(gè)元素的位置

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

例如,

import java.util.Collections;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        //創(chuàng)建一個(gè)ArrayList
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        System.out.println("ArrayList1: " + numbers);

        // 使用 reverse()
        Collections.reverse(numbers);
        System.out.println("反轉(zhuǎn) 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);
    }
}

輸出結(jié)果

ArrayList1: [1, 2]
反轉(zhuǎn) ArrayList1: [2, 1]
ArrayList1 使用 swap(): [1, 2]
ArrayList2 使用 addALl(): [1, 2]
ArrayList1 使用 fill(): [0, 0]
ArrayList2 使用 copy(): [0, 0]

注意:執(zhí)行copy()方法時(shí),兩個(gè)列表的大小應(yīng)相同。

4.使用binarySearch()搜索

Java集合框架的binarySearch()方法搜索指定的元素。它返回元素在指定集合中的位置。例如,

import java.util.Collections;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        //創(chuàng)建一個(gè)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);
    }
}

輸出結(jié)果

3的位置是 2

注意:在執(zhí)行binarySearch()方法之前,應(yīng)對(duì)集合進(jìn)行排序。

要了解更多信息,請(qǐng)?jiān)L問(wèn)Java Binary Search。

5.組合

  • frequency() - 返回元素在集合中存在的次數(shù)計(jì)數(shù)

  • disjoint() - 檢查兩個(gè)集合是否包含一些公共元素

例如,

import java.util.Collections;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        //創(chuàng)建一個(gè)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("兩個(gè)列表是不相交的? " + value);
    }
}

輸出結(jié)果

ArrayList1: [1, 2, 3, 2]
Count of 2: 2
ArrayList2: [5, 6]
兩個(gè)列表是不相交? true

6.尋找最大和最小元素

Java集合框架的min()和max()方法分別用于查找最小和最大元素。例如,

import java.util.Collections;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        //創(chuàng)建一個(gè)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);
    }
}

輸出結(jié)果

最小元素: 1
最大元素: 3
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清