你的意思是这样吗?
public static void main(String[] args) {
final Set<String> nounPhrases = new HashSet<>();
nounPhrases.add("java");
nounPhrases.add("jsp");
nounPhrases.add("book");
final Set<String> nounPhrases2 = new HashSet<>();
nounPhrases2.add("web");
nounPhrases2.add("php");
nounPhrases2.add("java");
nounPhrases2.add("book");
for (final String element : nounPhrases) {
if (nounPhrases2.contains(element)) {
System.out.println("They have " + element);
}
}
}
我的输出:
They have java
They have book
编辑:
根据您的评论,如果我理解正确的话,如果您想获取两个集合中的共同元素,只需存储这些值并返回它们即可。
public static void main(String[] args) {
final Set<String> nounPhrases = new HashSet<>();
nounPhrases.add("java");
nounPhrases.add("jsp");
nounPhrases.add("book");
final Set<String> nounPhrases2 = new HashSet<>();
nounPhrases2.add("web");
nounPhrases2.add("php");
nounPhrases2.add("java");
nounPhrases2.add("book");
System.out.println(getCommon(nounPhrases, nounPhrases2));
}
public final static Set<String> getCommon(Set<String> setA, Set<String> setB) {
final Set<String> result = new HashSet<>();
for (final String element : setA) {
if (setB.contains(element)) {
result.add(element);
}
}
return result;
}
你可以使用泛型使该方法适用于除了字符串以外的其他元素:
public final static <T> Set<T> getCommon(Set<T> setA, Set<T> setB) {
final Set<T> result = new HashSet<>();
for (final T element : setA) {
if (setB.contains(element)) {
result.add(element);
}
}
return result;
}
如果性能很重要的话,您应该先检查大小,然后只遍历较小集合的元素。如果您有一个包含1个元素的集合和一个包含100个元素的集合,从较小的开始将使您只需要一次迭代,而从较大的开始将使您需要进行100次检查,其中只有1个元素可能同时存在于两个集合中。
seta.equals(setb)
有什么问题? - laune