跳到主要内容

Java 算法

提示
  1. Java 集合框架算法概述:Java 集合框架提供了一系列静态方法(称为通用算法),用于对集合中的元素执行操作,如排序、随机排序、搜索和其他数据操作。
  2. 排序和随机排序sort() 方法用于自然顺序排序集合元素,而 shuffle() 方法用于随机排序元素,打破现有顺序。
  3. 其他常用操作和极值查找:集合框架还提供了 reverse()fill()copy()swap()addAll() 等方法用于操作数据;binarySearch() 用于查找元素;frequency()disjoint() 用于组合操作;min()max() 用于找到集合中的最小和最大元素。

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() 方法的排序顺序。

2. 使用 shuffle() 进行随机排序

Java 集合框架的 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("排序后的 ArrayList: " + numbers);

// 使用 shuffle() 方法
Collections.shuffle(numbers);
System.out.println("使用 shuffle 的 ArrayList: " + numbers);

}
}

输出

排序后的 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("使用 swap() 的 ArrayList1: " + numbers);

ArrayList<Integer> newNumbers = new ArrayList<>();

// 使用 addAll
newNumbers.addAll(numbers);
System.out.println("使用 addAll() 的 ArrayList2: " + newNumbers);

// 使用 fill()
Collections.fill(numbers, 0);
System.out.println("使用 fill() 的 ArrayList1: " + numbers);

// 使用 copy()
Collections.copy(newNumbers, numbers);
System.out.println("使用 copy() 的 ArrayList2: " + newNumbers);
}
}

输出

ArrayList1: [1, 2]
反转后的 ArrayList1: [2, 1]
使用 swap()ArrayList1: [1, 2]
使用 addAll()ArrayList2: [1, 2]
使用 fill()ArrayList1: [0, 0]
使用 copy()ArrayList2: [0, 0]

注意:执行 copy() 方法时,两个列表应该具有相同的大小。

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() 方法之前,集合应该是已经排序的。

5. 组合操作

  • frequency() - 返回集合中某个元素出现的次数
  • disjoint() - 检查两个集合是否包含某些共同元素

例如,

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("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("两个列表是不相交的: " + value);
}
}

输出

ArrayList1: [1, 2, 3, 2]
2 的计数: 2
ArrayList2: [5, 6]
两个列表是不相交的: 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