문제

즉,내가 두 개 또는 세트를 더하고 싶을 반환하는 새로운 설정을 포함하는 하나:

  1. 의 모든 요소 각각 설정은 일반적인(과).
  2. 의 모든 요소를 총의 각각을 설정(또는).
  3. 의 모든 요소에 고유 한 각각 설정합니다.(XOR).

이 쉽고,기존의 방법으로는 그렇게 하라고 하셨을까?

편집: 는 잘못된 용어를,그렇지 않나요?

도움이 되었습니까?

해결책

2 개의 세트 객체 a와 b를 가정합니다

그리고 (두 세트의 교차점)

a.retainAll(b); 

또는 (두 세트의 연합)

a.addAll(b);

xor는 자신의 루프를 굴립니다.

foreach item
if(a.contains(item) and !b.contains(item) ||  (!a.contains(item) and b.contains(item)))
 c.add(item)

또는 이것을하십시오 :

c.addAll(a); 
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a); 

참조 문서를 설정하십시오페이지. 이상.

다른 팁

당신은 사용할 수 있습니다 Google 수집은 클래스를 설정합니다 여기에는 intersection () Union () 및 SymmetricDifference ()가 있습니다.

Sets.intersection(set1, set2);
Sets.union(set1, set2);

SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());

@Milhous 말했:

설정 확인합니다.당신이 사용하는 경우 addAll 당신을 얻을 수 있습니다.당신이 사용하는 경우 retainAll 당신을 얻을 수 있습니다.나 에 대해 알 Xor.

그것처럼 보인 경우 설정 s1s2 당신이 얻을 XOR:

  1. 사본을 설정 s1 하기 s3
  2. s1.removeAll(s2); (s1 이제 모든 요소를 포함하지 않에서 s2)
  3. s2.removeAll(s3); (s2 이제 모든 요소를 포함하지 않에 s3=전 s1)
  4. s1.addAll(s2); (s1 지금이 포함되의 결합 위의 두 가지 세트)

세트를 확인하십시오 API. AddAll을 사용하면 얻을 수 있습니다. RetainAll을 사용하면 다음을 얻을 수 있습니다. 나는 xor에 대해 모른다.

편집하다: 세트 문서에서.

... 지정된 컬렉션이 세트 인 경우 AddAll 작업은이 세트를 효과적으로 수정하여 값이 두 세트의 결합이되도록합니다.

.... 지정된 컬렉션이 세트 인 경우이 작업은이 세트를 효과적으로 수정하여 값이 두 세트의 교차점이되도록 효과적으로 수정합니다.

Jakarta Common Collections API가 노조, 교차로 등을 지원한다고 확신합니다.

Google Collections API도하지 않았다면 놀랄 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top