Java arraylist无法使用arrays.aslist找到构造函数
我在代码中使用了Arrays.asList().contains()方法,如顶部答案所示:,因此我将在代码中使用Arrays.asList() 但是,编译器拒绝以下代码。是因为我的素数数组使用了原语,而不是引用类型吗?我不这么认为,因为自动装箱,但我只是想检查一下Java arraylist无法使用arrays.aslist找到构造函数,java,arrays,generics,arraylist,Java,Arrays,Generics,Arraylist,我在代码中使用了Arrays.asList().contains()方法,如顶部答案所示:,因此我将在代码中使用Arrays.asList() 但是,编译器拒绝以下代码。是因为我的素数数组使用了原语,而不是引用类型吗?我不这么认为,因为自动装箱,但我只是想检查一下 import java.math.*; import java.util.ArrayList; import java.util.Arrays; public class .... { public static void
import java.math.*;
import java.util.ArrayList;
import java.util.Arrays;
public class .... {
public static void main(String[] args) {
int[] primes = formPrimes(15);
ArrayList<Integer> primes1 = new ArrayList<Integer>(Arrays.asList(primes));
// Rest of code...
}
public static int[] formPrimes(int n) {
// Code that returns an array of integers
}
}
import java.math.*;
导入java.util.ArrayList;
导入java.util.array;
公共课。。。。{
公共静态void main(字符串[]args){
int[]素数=形式素数(15);
ArrayList primes1=新的ArrayList(Arrays.asList(primes));
//代码的其余部分。。。
}
公共静态int[]formPrimes(int n){
//返回整数数组的代码
}
}
我得到一个错误,一个找不到符号的错误
符号:构造函数ArrayList(java.util.List)
位置:类java.util.ArrayList
ArrayList primes1=新的ArrayList(Arrays.asList(primes))
基本上,我有一个返回整数数组的函数,我想把它转换成数组列表,但是我在使用ArrayList构造函数时遇到了麻烦。是的。自动装箱不适用于数组,仅适用于原语 我在eclipse中遇到的错误是
构造函数数组列表(列表)未定义
这是因为ArrayList中的构造函数被定义为
公共ArrayList(集合primes
是一个基元int
类型的数组;该类型不是从Object
派生的,因此可以自动放入列表中(与所有集合
一样,它只能容纳对象
s)。@Justin是对的;您需要手动将数组中的项添加到列表中。如果您这样做是为了访问包含项
方法你也可以自己写
public boolean contains(int[] array, int item) {
for (int element: array)
if (element == item)
return true;
return false;
}
事实上,我认为这可能是因为Arrays.asList返回的是一个列表,而不是数组列表。是这样吗?不,不是这样的——ArrayList和list都是一个集合,这是ArrayList构造函数所期望的。这是因为您在混合类型。我认为问题更多地在于,您不希望有数组列表,而不是数组中的项目列表。Andrew,这也解释了为什么我的类似代码使用Arrays.asList()处理字符串数组,因为字符串显然是一种有效的泛型类型。谢谢你的解释!是的,这是另一种选择。我试图访问contains方法,我想我没有真正想到这一点。
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
public boolean contains(int[] array, int item) {
for (int element: array)
if (element == item)
return true;
return false;
}