原文: https://www.programiz.com/java-programming/algorithms

在本教程中,我们将借助示例学习 Java 集合框架提供的不同算法。

Java 集合框架提供了各种算法,可用于处理存储在数据结构中的元素。

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

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

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


1.使用sort()排序

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

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Creating an array list
  6. ArrayList<Integer> numbers = new ArrayList<>();
  7. // Add elements
  8. numbers.add(4);
  9. numbers.add(2);
  10. numbers.add(3);
  11. System.out.println("Unsorted ArrayList: " + numbers);
  12. // Using the sort() method
  13. Collections.sort(numbers);
  14. System.out.println("Sorted ArrayList: " + numbers);
  15. }
  16. }

输出

  1. Unsorted ArrayList: [4, 2, 3]
  2. Sorted ArrayList: [2, 3, 4]

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

要了解更多信息,请访问 Java Sorting“) 。


2.使用shuffle()打乱

Java 集合框架的shuffle()方法用于破坏数据结构中存在的任何种类的顺序。 它与排序相反。 例如,

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Creating an array list
  6. ArrayList<Integer> numbers = new ArrayList<>();
  7. // Add elements
  8. numbers.add(1);
  9. numbers.add(2);
  10. numbers.add(3);
  11. System.out.println("Sorted ArrayList: " + numbers);
  12. // Using the shuffle() method
  13. Collections.shuffle(numbers);
  14. System.out.println("ArrayList using shuffle: " + numbers);
  15. }
  16. }

输出

  1. Sorted ArrayList: [1, 2, 3]
  2. ArrayList using shuffle: [2, 1, 3]

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

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


3.常规数据处理

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

  • reverse() - 反转元素的顺序
  • fill() - 用指定的值替换集合中的每个元素
  • copy() - 创建从指定源到目标的元素副本
  • swap() - 交换集合中两个元素的位置
  • addAll() - 将一个集合的所有元素添加到其他集合

例如,

  1. import java.util.Collections;
  2. import java.util.ArrayList;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Creating an ArrayList
  6. ArrayList<Integer> numbers = new ArrayList<>();
  7. numbers.add(1);
  8. numbers.add(2);
  9. System.out.println("ArrayList1: " + numbers);
  10. // Using reverse()
  11. Collections.reverse(numbers);
  12. System.out.println("Reversed ArrayList1: " + numbers);
  13. // Using swap()
  14. Collections.swap(numbers, 0, 1);
  15. System.out.println("ArrayList1 using swap(): " + numbers);
  16. ArrayList<Integer> newNumbers = new ArrayList<>();
  17. // Using addAll
  18. newNumbers.addAll(numbers);
  19. System.out.println("ArrayList2 using addAll(): " + newNumbers);
  20. // Using fill()
  21. Collections.fill(numbers, 0);
  22. System.out.println("ArrayList1 using fill(): " + numbers);
  23. // Using copy()
  24. Collections.copy(newNumbers, numbers);
  25. System.out.println("ArrayList2 using copy(): " + newNumbers);
  26. }
  27. }

输出

  1. ArrayList1: [1, 2]
  2. Reversed ArrayList1: [2, 1]
  3. ArrayList1 Using swap(): [1, 2]
  4. ArrayList2 using addALl(): [1, 2]
  5. ArrayList1 using fill(): [0, 0]
  6. ArrayList2 using copy(): [0, 0]

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


4.使用binarySearch()搜索

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

  1. import java.util.Collections;
  2. import java.util.ArrayList;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Creating an ArrayList
  6. ArrayList<Integer> numbers = new ArrayList<>();
  7. numbers.add(1);
  8. numbers.add(2);
  9. numbers.add(3);
  10. // Using binarySearch()
  11. int pos = Collections.binarySearch(numbers, 3);
  12. System.out.println("The position of 3 is " + pos);
  13. }
  14. }

输出

  1. The position of 3 is 2.

注意:应在执行binarySearch()方法之前对集合进行排序。

要了解更多信息,请访问 Java Binary Search“) 。


5.成分

  • frequency() - 返回元素在集合中存在的次数计数
  • disjoint() - 检查两个集合是否包含某些公共元素

例如:

  1. import java.util.Collections;
  2. import java.util.ArrayList;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Creating an ArrayList
  6. ArrayList<Integer> numbers = new ArrayList<>();
  7. numbers.add(1);
  8. numbers.add(2);
  9. numbers.add(3);
  10. numbers.add(2);
  11. System.out.println("ArrayList1: " + numbers);
  12. int count = Collections.frequency(numbers, 2);
  13. System.out.println("Count of 2: " + count);
  14. ArrayList<Integer> newNumbers = new ArrayList<>();
  15. newNumbers.add(5);
  16. newNumbers.add(6);
  17. System.out.println("ArrayList2: " + newNumbers);
  18. boolean value = Collections.disjoint(numbers, newNumbers);
  19. System.out.println("Two lists are disjoint: " + value);
  20. }
  21. }

输出

  1. ArrayList1: [1, 2, 3, 2]
  2. Count of 2: 2
  3. ArrayList2: [5, 6]
  4. Two lists are disjoint: true

6.寻找极值

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

  1. import java.util.Collections;
  2. import java.util.ArrayList;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Creating an ArrayList
  6. ArrayList<Integer> numbers = new ArrayList<>();
  7. numbers.add(1);
  8. numbers.add(2);
  9. numbers.add(3);
  10. // Using min()
  11. int min = Collections.min(numbers);
  12. System.out.println("Minimum Element: " + min);
  13. // Using max()
  14. int max = Collections.max(numbers);
  15. System.out.println("Maximum Element: " + max);
  16. }
  17. }

输出

  1. Minimum Element: 1
  2. Maximum Element: 3