Java:가 쉽고 빠른 방법이고,거나,또는 XOR 함께합니다.
-
23-08-2019 - |
문제
즉,내가 두 개 또는 세트를 더하고 싶을 반환하는 새로운 설정을 포함하는 하나:
- 의 모든 요소 각각 설정은 일반적인(과).
- 의 모든 요소를 총의 각각을 설정(또는).
- 의 모든 요소에 고유 한 각각 설정합니다.(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.
그것처럼 보인 경우 설정 s1
고 s2
당신이 얻을 XOR:
- 사본을 설정
s1
하기s3
s1.removeAll(s2);
(s1 이제 모든 요소를 포함하지 않에서 s2)s2.removeAll(s3);
(s2 이제 모든 요소를 포함하지 않에 s3=전 s1)s1.addAll(s2);
(s1 지금이 포함되의 결합 위의 두 가지 세트)
세트를 확인하십시오 API. AddAll을 사용하면 얻을 수 있습니다. RetainAll을 사용하면 다음을 얻을 수 있습니다. 나는 xor에 대해 모른다.
편집하다: 세트 문서에서.
... 지정된 컬렉션이 세트 인 경우 AddAll 작업은이 세트를 효과적으로 수정하여 값이 두 세트의 결합이되도록합니다.
.... 지정된 컬렉션이 세트 인 경우이 작업은이 세트를 효과적으로 수정하여 값이 두 세트의 교차점이되도록 효과적으로 수정합니다.
Jakarta Common Collections API가 노조, 교차로 등을 지원한다고 확신합니다.
Google Collections API도하지 않았다면 놀랄 것입니다.