2016-10-10 5 views
1

меня написать код, как:использовать для цикла для посещения всех элементов в HashSet (Java)?

public class Solution { 
    public int[] intersection(int[] nums1, int[] nums2) { 
     HashSet<Integer> has1 = new HashSet(Arrays.asList(nums1)); 
     for (int i: has1) 
      System.out.println(i); 
     return nums1; 
    } 
} 

num1: [1,2,4,2,3] 
num2: [4,5,6,3] 

На цикл он говорит java.lang.ClassCastException: [I cannot be cast to java.lang.Integer

+0

уже ответил http://stackoverflow.com/questions/12455737/how-to-iterate-over-a-set-hashset-without-a-iterator – Hector

+0

'int' и' Integer' - это не тот же тип. Исправьте тип в 'for', и он должен работать. – ajb

+0

Да, спасибо! Я написал этот код на основе этой идеи. Однако в моем коде есть ошибка. Я хочу знать, как это исправить. –

ответ

4

вы не можете сделать это напрямую, но вы должны предпочесть косвенный подход

int[] a = { 1, 2, 3, 4 }; 
     Set<Integer> set = new HashSet<>(); 
     for (int value : a) { 
      set.add(value); 
     } 
     for (Integer i : set) { 
      System.out.println(i); 
     } 

с использованием Java 8

1) Set<Integer> newSet = IntStream.of(a).boxed().collect(Collectors.toSet());//recomended 

    2) IntStream.of(a).boxed().forEach(i-> System.out.println(i)); //applicable 

здесь первые foreach достаточно для вас, и если вы хотите пойти на съемочной площадке, пойти с вторым циклом

0

Вашей коллекция, содержащая Integer объектов, поэтому во время прохода через петлю Еогеаспа, вы должны написать for (Integer i : collection) - это потому, что примитивный тип int не имеют собственную реализацию Iterator.