/** * 求两个集合的交集(即两个集合都共有的) * */ //一般法 最简单、粗暴的循环遍历2个集合,判断如果有相同的元素就取出来。假设集合1的长度为M,集合2的长度为N,那么,时间复杂度为:O(M*N) public static List<String> GetIntersection(List<String> list1, List<String> list2) { List<String> list3 = new ArrayList<String>(); for (String str1 : list1) { for (String str2 : list2) { if (str1.equals(str2)) list3.add(str1); } } return list3; } //最优法 利用hash这种很有用的数据结构来实现。我们知道,hash的特点之一就是不允许有重复元素,即hash表中的元素都是唯一的。所以,我们的思路就是:先把第一个集合的所有元素都放进hashSet中,时间复杂度O(M);再把第二个集合中的元素放进hashSet中,如果有重复元素,就是这2个集合的交集,时间复杂度为O(N)。即总的时间复杂度从O(M*N)降低到了O(M+N)。 public static List<String> GetIntersection2(List<String> list1, List<String> list2) { List<String> list3 = new ArrayList<String>(); HashSet<String> hashSet = new HashSet<String>(); for (String item : list1) { hashSet.add(item); } for (String item : list2) { if (hashSet.add(item) == false) { list3.add(item); } } return list3; }
求两个集合的交集
猜你喜欢
转载自fengzhaoyang.iteye.com/blog/2232915
今日推荐
周排行