2015-01-24 3 views
0

HashSet의 HashSet을 만들었습니다. 하위 집합 안의 정수 값에 액세스하려고합니다. 내 HashSet HashSet은 다음과 같은 Set의 모든 하위 집합을 포함하는 집합입니다. -HashSet의 HashSet 요소에 액세스 중

[], [1], [2], [1], [3], [1 , [3], [4], [1,4], [2, 3], [1,2,3], [2,4], [3,4], [1, 2, 4] , 3, 4], [2, 3, 4], [1, 2, 3, 4].

enter code here 

코드는 다음과 같습니다

public class Subsets { 
public static void main(String[] args){ 
    Set<Set<Integer>> subsets1 = new HashSet<Set<Integer>>(); 
    Set<Integer> mySet = new HashSet<Integer>(); 
    mySet.add(1); 
    mySet.add(2); 
    mySet.add(3); 
    subsets1 = powerSet(mySet); 
     } 
public static <E> Set<Set<E>> powerSet(Set<E> originalSet) { 
    Set<Set<E>> sets = new HashSet<Set<E>>(); 
    if (originalSet.isEmpty()) { 
     sets.add(new HashSet<E>()); 
     return sets; 

    } 
    List<E> list = new ArrayList<E>(originalSet); 
    E head = list.get(0); 
    Set<E> rest = new HashSet<E>(list.subList(1, list.size())); 
    for (Set<E> set : powerSet(rest)) { 
     Set<E> newSet = new HashSet<E>(); 
     newSet.add(head); 
     newSet.addAll(set); 
     sets.add(newSet); 
     sets.add(set); 
    }  
    return sets; 
} 
    } 
+2

그리고? 뭐가 문제 야? 코드는 집합의 요소를 반복하는 방법을 이미 알고 있음을 보여줍니다. –

+0

"액세스"란 무엇을 의미합니까? 당신은 그들과 무엇을하고 싶습니까? –

+0

나는 더 큰 세트의 각 요소를 반복하고 다른 루프는 반복 할 수있는 부분 집합을 반복하고 싶습니다. 요소는 액세스 할 수 없습니다. 이것이 가능하지 않으면 대체 솔루션을 제공하십시오. –

답변

1

당신이 중첩 된 Set<Integer>에 도착하기 forEach 방법을 사용할 수 java8을 사용하고 기본 정수 값에 도착하는 또 다른 forEach를 호출하는 경우. 이것은 당신의 주어진 예제이 출력을 생성 할

subsets1.forEach(s -> { 
     System.out.println("New set: "); 
     s.forEach(s2 -> { 
      System.out.println(String.valueOf(s2)); 
     }); 
    }); 

: 좀 더 자격을 갖춘 작업을 할

subsets1.forEach(s -> s.forEach(s2 -> System.out.println(String.valueOf(s2)))); 

여러 줄의 코드 샘플 :

인라인 코드 샘플은 모든 정수 값을 syso하는

New set: 
New set: 
1 
New set: 
2 
New set: 
1 
2 
New set: 
3 
New set: 
1 
3 
New set: 
2 
3 
New set: 
1 
2 
3 

이 제품은 찾고 계신 것입니다.

for(Set<Integer> set : subsets1) 
    { 
     for(Integer i : set) 
     { 
      System.out.println(i); 
     } 
    } 

에서 엄청난 성능 문제가 발생할 수 있습니다 오토 박싱/자동 언 박싱과 중첩 루프에서 int 또는 Integer을 사용하여 신중하게 선택 : 당신은 정수 값을 포함하는 집합을 통해 루프 수있는 없음 java8 사용자로서

실행 시간.

+0

감사합니다. 하지만 어쨌든 java 6/7에서 이것을 수행하는 방법은 java 8을 사용할 수 없기 때문입니다. –

+0

이 문제의 다른 해결책이 있습니까? –

+0

당신은 나에게 적절한 문법을 ​​보내 주시겠습니까? 두 번째 for 루프를 구현하는 방법을 모르겠습니다. 나는 이것을 정말로 고마워 할 것이다. –