List求差集问题,解决思路使用了List的结构特性
先上代码,再分析
List list1 = new LinkedList();
List list2 = new LinkedList();
List list3 = new ArrayList();
for(int i = 0, len1 = list1.size(); i < len1; i++) {
Object obj1 = list1.get(i);
boolean flag = true;
for(int j = 0, len2 = list2.size(); j < len2; j++) {
Object obj2 = list2.get(j);
if (obj1.equals(obj2)) {
flag = false;
break;
}
}
if (flag) {
list3.add(obj1);
}
}
求差集 主要的性能消耗是在遍历比较上,因为链表的遍历性能更高 所以使用LinkedList遍历
然后因为添加操作比删除操作更高效 所以使用第三个链表添加不重复的元素
上面的思路中使用Iterator的方式循环代替fori循环,时间复杂度为O(m * n)
还有更进一步的思路
使用Hash散列来做
首先将list1的所有元素放到hash散列表中,
然后将list2的所有元素放到hash散列表中,
如果有重复的元素 则标记该元素
之后取出没有被标记的元素,即差集
时间复杂度为O(m + n)