日期:2014-05-20  浏览次数:20735 次

如何在ArrayList集合中求出它的补集,谢谢。
在第一个ArrayList表中存放多条记录A,B   ,C,D,E.....等对象,
在第二个ArrayLsit表中存放第一个表中的子集,如(A,E等对象)。
我如何能得出第一个ArrayList表的补集,即第一个ArrayList表中除去第二个ArrayList后剩余的结果

------解决方案--------------------
挨个匹配呗,你手动是怎么来的,就让机器怎么来
------解决方案--------------------
最容易的是想到循环套循环,但是显然效率不行。下面有没有高人?
------解决方案--------------------
用hashset去实现
------解决方案--------------------
list1.removeAll(list2);
------解决方案--------------------
List <Character> list1 = new ArrayList <Character> ();
for (char c = 'A '; c <= 'E '; c++)
list1.add(new Character(c));

List <Character> list2 = new ArrayList <Character> ();
list2.add(new Character( 'A '));
list2.add(new Character( 'E '));

list1.removeAll(list2);


不过这个操作是直接从list1里面删除的,如果需要保留list1的元素的话,需要预先手工拷贝一份
------解决方案--------------------
第二个ArrayLsit 调用其迭代器进行循环。
然后第一个ArrayLsit 换成ListedList 使用remove()方法

最后在把ListedList 换回ArrayLsit

注: ListedList的添加删除要比ArrayLsit效率快
ArrayLsit 的查询要比ListedList 效率快


------解决方案--------------------
不太明白你的意思.看看这个对你有没有帮助
http://community.csdn.net/Expert/topic/5319/5319310.xml?temp=.1032526
------解决方案--------------------
回复人:Dan1980() ( 五级(中级)) 信誉:98 2007-01-26 12:45:54 得分:0
list1.removeAll(list2);
===============================
这个不错。加个条件就更好了。
if(list1.containAll(list2)){
list1.removeAll(list2);
}