请问如何比较两个List中的值是否相同?

解决方案 »

  1.   

    如果不考虑顺序
    先判断size相同与否
    再通过containsAll来判断不过效率不高,containsAll相当于自己遍历一边。如果数据量不是很大无所谓,否则可以考虑用map表来判断。
      

  2.   

    if(list1.equals(list2))
    {
       system.out.println("相同");
    }
      

  3.   

    注:
    xuxiaosz的方法是考虑顺序的,也就是说不但包含的值相同,而且值的顺序也相同
      

  4.   

    按我2楼的说法就不考虑顺序
    这种方法写起来最方便
    list1,list2if(list1.size()!=list2.size()){
       return false;
    }
    return list1.containsAll(list2);
    这样相当于n*n的对比,还是比较慢的
    快点用map
    if(list1.size()!=list2.size()){
       return false;
    }
    HashMap map=new HashMap();
    for(int i=0;i<list1.size();i++){
       map.put(list1.get(i),Boolean.False);
    }
    for(int i=0;i<list2.size();i++){
      Object temp=list2.get(i);
      if(!map.contains(temp){
         return false;
      }
      if(map.get(temp).booleanValue){
        return false;
      }else{
        map.put(temp,Boolean.True);
      }
    }
    return true;以上方法效率高,但占用空间多一点,而且只针对非String这类Object
    我没有再编译器上测试过,大概意思明白就好
      

  5.   

    if(list1.size()==list2.size)
    {
       if(list1.contains(list2))
       {
         system.out.println("相同");   }}
      

  6.   

    以下代码适合对容器对象进行内部元素的比较。比较是递归的。如果不需要递归这样的方式,可以参考 commons-lang 中的 ListUtils 类,那里提供了比较的方法。--------------------------------------
    /**
     * 对容器类对象的内容进行比较的类
     *
     * @author yidinghe
     */
    public class CompareUtil {    private static Object[] getKeys(Map map) {
            Object[] keys = new Object[map.size()];
            return map.keySet().toArray(keys);
        }    /**
         * 比较可能为空对象
         *
         * @param obj1 要比较的对象
         * @param obj2 要比较的对象
         *
         * @return 如果两个对象全都是 null 或者全都不是 null,则返回 true
         */
        private static boolean compareNull(Object obj1, Object obj2) {
            return (obj1 == null && obj2 == null) || (obj1 != null && obj2 != null);
        }    /**
         * 对对象进行比较。本方法针对容器对象会作深层次的比较,
         * 如果两个容器对象内的元素都相等,那么两个容器对象被认为是相等的。
         * 如果容器对象内的元素同样为容器对象,也会做这样的比较。
         *
         * <p style="color:red">
         * 注意!如果容器对象之间存在循环包含,则本函数会抛出 StackOverflowError!
         * </p>
         *
         * 目前支持的容器对象有:List、Map、数组。
         *
         * @param obj1 要比较的对象
         * @param obj2 要比较的对象
         *
         * @return 如果两个对象相等,则返回 true。
         */
        public static boolean compareObject(Object obj1, Object obj2) {
            if (obj1 == null && obj2 == null) {
                return true;
            } else if (obj1 == null || obj2 == null) {
                return false;
            }        if (obj1 instanceof Map && obj2 instanceof Map) {
                return compareMap((Map) obj1, (Map) obj2);
            } else if (obj1 instanceof List && obj2 instanceof List) {
                return compareList((List) obj1, (List) obj2);
            } else if (obj1.getClass().isArray() && obj2.getClass().isArray()) {
                return compareArray((Object[]) obj1, (Object[]) obj2);
            }        return obj1.equals(obj2);
        }    public static boolean compareArray(Object[] arr1, Object[] arr2) {
            if (!compareNull(arr1, arr2)) {
                return false;
            }        if (arr1 == null || arr2 == null) {
                return true;
            }        if (arr1.length != arr2.length) {
                return false;
            }        for (int i = 0; i < arr1.length; i++) {
                if (!compareObject(arr1[i], arr2[i])) {
                    return false;
                }
            }
            return true;
        }    /**
         * 比较 List 对象
         *
         * @param list1 要比较的对象
         * @param list2 要比较的对象
         *
         * @return 如果两个对象包含的元素相等,则返回 true
         */
        public static boolean compareList(List list1, List list2) {
            if (!compareNull(list1, list2)) {
                return false;
            }        if (list1 == null || list2 == null) {
                return true;
            }        if (list1.size() != list2.size()) {
                return false;
            }        for (int i = 0; i < list1.size(); i++) {
                if (!compareObject(list1.get(i), list2.get(i))) {
                    System.out.println();
                    return false;
                }
            }        return true;
        }    /**
         * 比较 Map 对象
         *
         * @param map1 要比较的对象
         * @param map2 要比较的对象
         *
         * @return 如果两个对象包含的值相等,则返回 true
         */
        public static boolean compareMap(Map map1, Map map2) {
            if (!compareNull(map1, map2)) {
                return false;
            }        if (map1 == null || map2 == null) {
                return true;
            }        if (map1.size() != map2.size()) {
                return false;
            }        Object[] keys = getKeys(map1);
            for (int i = 0; i < keys.length; i++) {
                if (!compareObject(map1.get(keys[i]), map2.get(keys[i]))) {
                    return false;
                }
            }        return true;
        }}