2017-03-02 128 views
-3

我正在尝试在数组中找到重复的元素。我已经使用遍历数组解决了它。但是现在我想将数组转换为数组列表并使用包含数组列表的关键字。将数组更改为ArrayList

我不能够转换数组ArrayList和使用含有关键字。请看看在下面的代码:

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

发布你的编译错误。 – khelwood

+0

是'len'用于initalization阻止一个实例变量吗? –

+0

你想要一个'ArrayList '吗?我想你更喜欢'ArrayList '。 –

回答

0

这里您arrlist变量的类型为int []。这里你的arrlist大小是1(整个输入数组作为单个条目)。

所以,你只能通过检查所有整数数组的存在,在列表中包含arrlist的方法。 如果(arrlist.contains(ARR)) //你的情况

+0

if(arrlist.contains(arr))将始终返回true。我怎样才能创建阵列中存在相同元素arraylist(整数类型)? –

0

找到dublicates一个更简单的方法返回true,是这样的一个:

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中的每个元素传递...

+0

这我已经完成了。我想用arraylist。谢谢:) –

1

有许多与你的代码的问题:

  • 你是创建一个ArrayList<int[]>,即数组的列表int。这个列表包含一个数组,也就是您开始使用的数组。我不认为这是你的意图。我的猜测是你想要一个包含数组中数字的ArrayList<Integer>。 khelwood的链接应该可以帮助你。
  • 您还没有宣布i也不len。我建议你使用for (int i = 0; i < arr.length; i++)
  • arrlist.contains(arr[i])总是返回false因为数组不能包含一个数字(在阵列内的数字是不搜索)的列表。这是一个ArrayList的设计问题,您可以询问它是否包含错误类型的元素(这是有历史原因的)。如果按照上面的建议将数组列表更改为ArrayList<Integer>,它将起作用。
  • 一旦你的工作上面,arrlist.contains(arr[i])总是返回true从数组中的每个数字将在数组列表,也即不重复的人。
+0

谢谢,1.是的,我想创建与数组中数组相同元素的整数列表。 2.我之前将元素更改为整数,但是我得到编译时错误(类型不匹配:无法从ArrayList 转换为ArrayList )3. len是我声明数组已声明的数组的长度。在这里张贴我忘了复制。需要上述编译时错误的帮助 –

+0

'数组。asList()'不适用于基元数组(如'int's)。这是编译时错误的原因。若要将您的'int'数组转换为'ArrayList ',您可以看到[如何将int [\]转换为Java中的列表](http://stackoverflow.com/questions/1073919/how-to-convert (如已经提到的)或使用'ArrayList arrlist = new ArrayList <>(Arrays.stream(arr).boxed()。collect(Collectors.toList())); '(需要Java 8)。 –

+1

这解决了我的问题。 –