比较两个set集合的元素是否完全相同(不要求顺序也相同)
1,刚开始考虑的算法是分别判断两个set集合是否互相包含:
/**
*
*/
package nc.set.test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @author limx
* @date 2011-7-15
*/
public class SetCompare {
Set<String> firstSets = new HashSet<String>();
Set<String> secondSets = new HashSet<String>();
private void init(List<String> firstList, List<String> secondList) {
for(String firstSet : firstList) {
firstSets.add(firstSet);
}
for(String secondSet : secondList) {
secondSets.add(secondSet);
}
}
public boolean compare(List<String> firstList, List<String> secondList) {
init(firstList, secondList);
if(firstSets.containsAll(secondSets) && secondSets.containsAll(firstSets)) {
return true;
}
return false;
}
public static void main(String[] args) {
SetCompare compare = new SetCompare();
List<String> firstList = new ArrayList<String>();
firstList.add("a");
firstList.add("b");
firstList.add("a");
List<String> secondList = new ArrayList<String>();
secondList.add("a");
secondList.add("b");
boolean isSame = compare.compare(firstList, secondList);
if(isSame) {
System.out.println("They are the same !");
}else {
System.out.println("They are not the same !");
}
}
}
2,但感觉分别调用两次containsAll方法,时间和空间复杂度并不算很好。于是想出这样的算法:当集合A和集合B的大小一样,并且其中一个包含另外一个的时候,那么,我们就可以说明两个集合里面的元素一致。
public boolean compare(List<String> firstList, List<String> secondList) {
init(firstList, secondList);
if(firstSets.size() == secondSets.size() && firstSets.containsAll(secondSets)) {
return true;
}
return false;
}