求两个字符串的交集并集和差集用JAVA

两个字符串是s1,s2求并集、交集和补集(差集)

【下面代码充分利用了Java数据结构的优势,但是,却忽略了一种情况,如果s1或s2本身有重复字符的话,就不能用了啊】


import java.util.HashMap;   
import java.util.HashSet;   
import java.util.LinkedList;   
import java.util.Map;   
import java.util.Map.Entry;   
import java.util.Set;
public class Stringbujiaocha {
	public static void main(String[] args) {
		String[] s1 = {"abc","123","der","der","56"};
		String[] s2 = {"abc","222"};
		/**************找交集*****************/
		String[] intersect12 = intersect(s1,s2);
		System.out.println("交集是:");
		for(String str : intersect12)
			System.out.print(str);
		System.out.println("");
		/****************下面是找并集********************/
		String[] union12 = union(s1,s2);
		System.out.println("并集是:");
		for(String str : union12)
			System.out.print(str);
		System.out.println("");
		/****************下面是找差集********************/
		String[] minus12 = minus(s1,s2);
		System.out.println("差集是:");
		for(String str :minus12)
			System.out.print(str);
		System.out.println("");
		
	}
	/*******************找交集******************/
	public static String[] intersect(String[] s1,String[] s2){
		Map<String, Boolean> map = new HashMap<String, Boolean>();
		LinkedList<String> list = new LinkedList<String>();
		
		for(String str:s1){
			if(!map.containsKey(str)){
				map.put(str, Boolean.TRUE);//没有找到 就放进去,设为true
			}
		}
		for(String str:s2){
			if(map.containsKey(str)){
				map.put(str, Boolean.FALSE);//找到的话就设置为false
			}	
		}
		for(Entry<String,Boolean> e: map.entrySet()){
			if(e.getValue().equals(Boolean.FALSE)){
				list.add(e.getKey());
			}
		}
		String[] res = {};
		return list.toArray(res);	
	}
	/*************找并集,利用HashSet不重复的特性,也可以修改交集****************/
	public static String[] union(String[] s1,String[] s2){
		Set<String> set = new HashSet<String>();
		for(String str: s1){
			set.add(str);
		}
		for(String str: s2){
			set.add(str);
		}
		String[] res = {};
		return set.toArray(res);	
	}
	/*************找差集****************/
	public static String[] minus(String[] s1,String[] s2){
		Map<String,Boolean> map = new HashMap<String,Boolean>();
		LinkedList<String> list = new LinkedList<String>();
		for(String str:s1){
			if(!map.containsKey(str)){
				map.put(str,Boolean.TRUE);
			}
		}
		for(String str:s2){
			if(map.containsKey(str)){
				map.put(str,Boolean.FALSE);
			}
		}
		for(Entry<String,Boolean> e:map.entrySet()){
			if(e.getValue().equals(Boolean.TRUE))
				list.add(e.getKey());
		}
		String[] res = {};
		return list.toArray(res);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_33608638/article/details/79934925