You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java初学者求助:拆解onlyPrimes方法中数组与ArrayList的结合逻辑

拆解onlyPrimes方法的逻辑

一、方法定义的核心含义

先看方法的完整定义:

public static ArrayList<Integer> onlyPrimes(int[] numbers)
  • int[] numbers:作为参数,接收你要筛选的固定长度int数组——毕竟你要处理的原始数字集合是确定的,用数组传递最直接。
  • 返回ArrayList<Integer>:因为筛选出的质数数量不确定(比如数组里可能有0个或多个质数),ArrayList支持动态添加元素,比固定长度的数组灵活太多,这就是不用int[]做返回值的原因。

二、初始化ArrayList的代码拆解

通常初始化是这两行(也可能合并成一行):

// 声明一个ArrayList类型的变量
ArrayList<Integer> primeList;
// 在内存中创建一个空的ArrayList实例,赋值给变量
primeList = new ArrayList<>();

或者更常用的合并写法:

ArrayList<Integer> primeList = new ArrayList<>();
  • 第一部分ArrayList<Integer> primeList:告诉程序“我要一个装Integer类型元素的ArrayList容器,名字叫primeList”。
  • 第二部分new ArrayList<>():在内存里真的造出这个空容器,现在primeList就可以用来装筛选出来的质数了。

补充:如果写new ArrayList<>(numbers.length),只是提前给容器分配了和输入数组一样大的初始空间,避免后续添加元素时频繁扩容,功能上和空初始化完全一致。

三、完整逻辑的代码示例(结合isPrime)

先写好基础的isPrime质数判断方法:

public static boolean isPrime(int num) {
    if (num <= 1) return false;
    for (int i = 2; i <= Math.sqrt(num); i++) {
        if (num % i == 0) return false;
    }
    return true;
}

再看onlyPrimes的完整实现,一步一步走:

public static ArrayList<Integer> onlyPrimes(int[] numbers) {
    // 1. 初始化空容器,准备装质数
    ArrayList<Integer> primeList = new ArrayList<>();
    
    // 2. 遍历输入数组里的每一个数字
    for (int num : numbers) {
        // 3. 调用isPrime判断当前数字是不是质数
        if (isPrime(num)) {
            // 4. 如果是质数,就放进容器里
            primeList.add(num);
        }
    }
    
    // 5. 遍历完所有数字后,把装着质数的容器返回
    return primeList;
}

四、实际运行的例子

假设传入的数组是int[] testNums = {2, 3, 4, 5, 6, 7, 8, 9, 10}:

  • 逐个检查数字:2是质数→加入容器;3是质数→加入;4不是→跳过;5是质数→加入……
  • 最后返回的primeList里的元素就是[2, 3, 5, 7]

五、关键点总结

  • 用int[]做参数:输入的原始数字集合长度固定,数组传递高效直接。
  • 返回ArrayList:筛选结果数量不确定,动态容器更适配需求。
  • 初始化代码:就是创建一个空的“篮子”,等着把筛选出来的质数装进去。

内容的提问来源于stack exchange,提问作者hpoly01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:33:18