亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

掌握 Java 集合算法:排序、打乱、搜索与更多实用操作

Java 集合算法

Java 集合框架提供一组静态方法(称为通用算法),可操作实现 Collection 接口的任意集合,简洁高效。


1. Collections.sort() 排序

sort() 按自然顺序(升序)排列元素。自定义排序需提供 Comparator。

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("Unsorted ArrayList: " + numbers);
        Collections.sort(numbers);
        System.out.println("Sorted ArrayList: " + numbers);
    }
}

输出

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

降序或特定规则可用自定义 Comparator,详见 Java 排序 指南。


2. Collections.shuffle() 打乱顺序

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);
        Collections.shuffle(numbers);
        System.out.println("ArrayList after shuffle: " + numbers);
    }
}

输出

Sorted ArrayList: [1, 2, 3]
ArrayList after shuffle: [2, 1, 3]

每次运行产生不同排列,基于 Fisher-Yates 算法。


3. 常规数据操作

Java 提供多种工具方法转换集合:

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);
        System.out.println("ArrayList1: " + numbers);
        Collections.reverse(numbers);
        System.out.println("Reversed ArrayList1: " + numbers);
        Collections.swap(numbers, 0, 1);
        System.out.println("ArrayList1 after swap(): " + numbers);
        ArrayList<Integer> newNumbers = new ArrayList<>();
        newNumbers.addAll(numbers);
        System.out.println("ArrayList2 using addAll(): " + newNumbers);
        Collections.fill(numbers, 0);
        System.out.println("ArrayList1 after fill(): " + numbers);
        Collections.copy(newNumbers, numbers);
        System.out.println("ArrayList2 after copy(): " + newNumbers);
    }
}

输出

ArrayList1: [1, 2]
Reversed ArrayList1: [2, 1]
ArrayList1 after swap(): [1, 2]
ArrayList2 using addAll(): [1, 2]
ArrayList1 after fill(): [0, 0]
ArrayList2 after copy(): [0, 0]

注意: copy() 要求目标集合至少与源集合大小相同。


4. Collections.binarySearch() 二分查找

在已排序集合中高效定位元素,返回索引或负的插入点。

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);
        int pos = Collections.binarySearch(numbers, 3);
        System.out.println("The position of 3 is " + pos);
    }
}

输出

The position of 3 is 2.

提示: 调用 binarySearch() 前必须排序,否则结果未定义。详见 Java 二分查找。


5. 集合组合分析

分析集合间关系的工具方法:

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);
        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 disjoint = Collections.disjoint(numbers, newNumbers);
        System.out.println("Two lists are disjoint: " + disjoint);
    }
}

输出

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

6. 查找最小值与最大值

用 min() 和 max() 获取最小/最大元素,适用于分析和边界检查。

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);
        int min = Collections.min(numbers);
        System.out.println("Minimum Element: " + min);
        int max = Collections.max(numbers);
        System.out.println("Maximum Element: " + max);
    }
}

输出

Minimum Element: 1
Maximum Element: 3

java

  1. 精通 Java 运算符:类型、语法与实战示例
  2. Java 注释:类型、用法与最佳实践
  3. 精通 Java if…else:控制流全解析
  4. 精通 Java 增强 for 循环:语法、示例与最佳实践
  5. Java break 语句:用法、时机与标签 break 详解
  6. 精通 Java 字符串:创建、方法与最佳实践
  7. 精通 Java 接口:概念、实现与最佳实践
  8. 精通 Java 匿名内部类:定义、语法与实战示例
  9. 精通 Java Try-With-Resources:自动资源管理详解
  10. Java 注解详解:类型、放置位置与实战示例
  11. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  12. Java 生成随机数实战:Random 与 Math.random 详解