我试图在数组中找到重复的元素。我已经使用遍历数组解决了它。但现在我想将数组转换为arraylist并使用包含arraylist的关键字。
我无法将数组转换为arraylist并使用contains关键字。请查看以下代码:
public void findDuplicate2() {
int arr[] = { 1, 2, 3, 4, 5, 3, 7, 5 };
ArrayList<int[]> arrlist = new ArrayList<>(Arrays.asList(arr));
for (i = 0; i < len; i++) {
if (arrlist.contains(arr[i]))
System.out.println(arr[i]);
else
System.out.println("no duplicate" + arr[i]);
}
}
答案 0 :(得分:1)
您的代码存在许多问题:
ArrayList<int[]>
,即int
数组的数组列表。此列表包含一个数组,即您从该数组开始的数组。我不认为这是你的意图。我的猜测是你想要一个包含数组中数字的ArrayList<Integer>
。 khelwood的链接可以帮助你。i
或len
。我建议你使用for (int i = 0; i < arr.length; i++)
。arrlist.contains(arr[i])
始终返回false
,因为数组列表不能包含数字(不搜索数组中的数字)。这是ArrayList
的设计问题,您可以询问它是否包含错误类型的元素(有历史原因)。如果你按照我的建议将arraylist更改为ArrayList<Integer>
,那么它就可以了。arrlist.contains(arr[i])
将始终返回true
,因为数组中的每个数字都在数组列表中,也是不重复的数字。答案 1 :(得分:0)
这里你的arrlist变量是int []类型。这里你的arrlist大小是1(整个输入数组作为单个条目)。
因此,您只能使用arrlist的contains方法检查列表中是否存在任何整数数组。 if(arrlist.contains(arr)) //在您的情况下返回true
答案 2 :(得分:0)
找到一个更容易的方式就是这个:
public void findDuplicate2(){
int arr[] = {1,2,3,4,5,3,7,5};
for (int i = 0; i < arr.length; i++) {
boolean dublicate = false;
for (int j = 0; j < arr.length; j++) {
if(arr[i] == arr[j] && i != j){
System.out.println(arr[i]);
dublicate = true;
break;
}
}
if(!dublicate)
System.out.println("No dublicate " + arr[i]);
}
}
在你的代码中,arraylist包含一个元素,即数组arr。您可以使用
进行检查System.out.println(arrlist.get(0));
System.out.println(arrlist.get(1));
正确的方法是将arr的每个元素转移到arraylist ......