List与List比较的问题

[code="java"]
List biglist;
List smalllist;
[/code]
两个List
smalllist是biglist的子集
怎么比较List里面存的对象相同呢?
大家说一说方便一点的方法?
谢谢
[b]问题补充:[/b]
我想确认的是把LIST中相同的找出来
smalllist是大LIST的子集

org.apache.commons.collections.CollectionUtils工具类

[code="java"]CollectionUtils.isEqualCollection(biglist,smalllist)[/code]

写一个静态方法,随处可以使用:

[code="java"]

//不考虑元素顺序是否相同
public static boolean isSame(List a,List b){
if(a.size() != b.size()){
return false;//先比较个数
}
for(Object tem : a){
if(!b.contains(tem)){//不包含tem元素
return false;
}
}
return true;
}[/code]

List本身就包含一个取交集的方法..retainAll(Collection<?> c)
这个方法会保存仅在列表中保留指定 collection 中所包含的元素

都子集了,还怎么相等?长度不同的两个List是不相等的

[code="java"]
List a ;
for(int i=0;i<biglist.size();i++){
for(int j=0;j<smalllist.size();j++){
if(==){
a.add(***);
}
}
}
[/code]
最简单的

另外list的equals方法就可以比较

楼主是不是想问怎么确认smalllist是不是biglist的子集?
[code="java"]
biglist.containsAll(smalllist)
[/code]

list的equals方法是被重写过的,先比较两个list的长度,在比较对应的元素,用的是equals方法

smalllist都是大LIST的子集,当然相同的部分就是smalllist了

可以这样:
[code="java"]
//不考虑元素顺序是否相同

public static List getSameElement(List a,List b){

List sameElementList = null;
for(Object tem : a){

if(b.contains(tem)){//包含tem元素

if(sameElementList == null){
sameElementList = new ArrayList();
}
sameElementList.add(tem);
}

}

return sameElementList ;

}

[/code]

如果是这样的话,比较快的方法就是先把两个List中的元素排序

然后将smallList中的元素与bigList中的元素进行比较

因为按照数据结构的说法,查找有序队列是最快的

如果注重效率的话,不能使用两次循环的方法。
这是肯定的,如果碰到两次循环、三次循环它的复杂度是O(M*N)、O(M*N*P)
所以最好的方法是把二次循环变成两个一次循环,这样效率上会大大提升

[code="java"]import java.util.List;
import java.util.ArrayList;

public class Test {

public static void main(String[] args) {

    List bigList = new ArrayList();
    bigList.add(new Integer(1));
    bigList.add(new Integer(2));
    bigList.add(new Integer(3));

    List smallList = new ArrayList();
    smallList.add(new Integer(1));
    smallList.add(new Integer(3));

    if (bigList.containsAll(smallList))
        System.out.println("smallList is a subset of bigList");
    else
        System.out.println("smallList is not a subset of bigList");

    smallList.add(new Integer(4));

    if (bigList.containsAll(smallList))
        System.out.println("smallList is a subset of bigList");
    else
        System.out.println("smallList is not a subset of bigList");

}

}[/code]

下面是containAll的实现:
[code="java"]public boolean containsAll(Collection<?> c) {
Iterator<?> e = c.iterator();
while (e.hasNext())
if(!contains(e.next()))
return false;
return true;
}[/code]