java

比较两个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;
	}
 

你可能感兴趣的:(java)