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
相关产品推荐
相关产品推荐

