如何在Java中合并两个字符串集合,但前提是它们具有相同的元素?
我是新来的Java和我试图(和 - apparently-失败),如果他们有共同的要素两个字符串组结合:如何在Java中合并两个字符串集合,但前提是它们具有相同的元素?
CommonElements = Set1;
CommonElements.retainAll(Set2);
System.out.println("common elements of"+Set1+"and"+Set2+":"+CommonElements);
if (CommonElements.size()!=0) {
Set1.addAll(Set2);
System.out.println("both sets"+Set1);
}
现在,我正在申请同样的事情,虽然我现在有套一个ArrayList:
for (i=0; i<myList.size(); i++) {
for (int j = 1; j<myList.size()-i; j++) {
Set<String> Set1 = myList.get(i);
System.out.println("Set1"+Set1);
Set<String> Set2 = myList.get(i+j);
System.out.println("Set2"+Set2);
Set<String> commonElements = myList.get(i);
commonElements.retainAll(Set2);
System.out.println("Common elements of"+i+"and"+(i+j)+":"+Set3);
if (commonElements.size()!=0) {
Set1.addAll(Set2);
myList.set(i, Set1);
System.out.println("both sets"+Set1);
}
System.out.println(myList.get(i));
不过的System.out.println(myList.get(I))结果:
如果这两组没有什么共同点: SET1变空, myList.get(i)返回[]。
如果两组确实有共同之处: Set1变为Set2,所以列表条目编号i取列表条目编号i + j的值。
有点蛮力可是......
public Set<String> mergeSetsIfAnyOverlap(Set<String> s1, Set<String> s2) {
Set<String> s3 = new HashSet<String>(s1) ; // copy s3
s3.retainAll(s1) ; // keep only things in s3 (aka s1) that exist in s2
if(!s3.isEmpty()) { // any common items ... ?
s3.addAll(s1) ; // ... yes than merge
} else {
s3.clear() ; // otherwise empty s3
}
return s3 ;
}
对不起...该代码既不提供交集也不提供工会...只是s1'的副本... – Vadim
- 当您将
Set1
指定为commonElements
时,您不会复制Set1。 CommonElements只是对相同Set1的另一个参考。所以,
commonElements.retainAll(Set2);
叶SET1和SET2 之间只有共同的元件在SET1
-
相反
-
Set
到List
保持唯一对象则:
现在Set1
只有共同的对象(即Set2
有他们作为井)
而且从Set2
最后Set1.addAll(Set2);
其余认沽对象Set1
所有Set1
后持有确切相同的对象为Set2
。
而不是Set<String> commonElements = myList.get(i);
做到这一点:
Set<String> commonElements = new HashSet<String>(); commonElements.addAll(myList.get(i));
然后你会在最后得到一个独特的联盟。
顺便说一句:在Java中有一个标准的命名约定,没有命名变量大写。大写的名字是用于类型 - 我的意思是使用set1
而不是Set1
,因为您正确地使用了commonElements
。
这是因为'retainAll'你'myList.get调用(我)'修改的列表。除非你告诉它,否则你认识到'Object'的变量赋值不会复制? – bcsb1001
@Dichard:我想要一个工会,但我首先要检查是否有交叉点,因为我不想要交叉点(两个集合加在一起)或交叉点(只存在于两个元素中) – Richard
@ Richard:如果它们没有至少一个共同的元素,则要合并这些集合。 – Wiesel