读书人

关于containsAll方法的有关问题?

发布时间: 2012-04-17 15:06:33 作者: rapoo

关于containsAll方法的问题???
发生了一个好奇怪的问题,我用List里面的一个containsAll方法来比较2个list是不是一样的,结果明明一样的2个list他居然给我返回一个false

Java code
public static boolean ListsCompare(List idFromDB, List idFromSolrSearch) {        System.out.println("###########idFromDB   " + idFromDB.size()                + "    ###########");        for (int i = 0; i < idFromDB.size(); i++) {            System.out.println(idFromDB.get(i));        }        System.out.println("###########idFromSolrSearch     "                + idFromSolrSearch.size() + "    ###########");        for (int i = 0; i < idFromSolrSearch.size(); i++) {            System.out.println(idFromSolrSearch.get(i));        }        System.out.println("idFromDB:" + idFromDB);        System.out.println("idFromSolrSearch:" + idFromSolrSearch);        if (idFromDB.containsAll(idFromSolrSearch)) {            renderJSON(new Result("一样的!"));            return true;        } else {            renderJSON(new Result("不一样的"));            return false;        }    }

控制台打印的信息是:
###########idFromDB 1 ###########
2566
###########idFromSolrSearch 1 ###########
2566
idFromDB:[2566]
idFromSolrSearch:[2566]

我看过api了:
Java code
containsAllboolean containsAll(Collection<?> c)如果列表包含指定 collection 的所有元素,则返回 true。 指定者:接口 Collection<E> 中的 containsAll参数:c - 要在列表中检查其包含性的 collection 返回:如果列表包含指定 collection 的所有元素,则返回 true 抛出: ClassCastException - 如果指定 collection 中的一个或多个元素的类型和此列表不兼容(可选) NullPointerException - 如果指定的 collection 包含一个或多个 null 元素,并且此列表不允许 null 元素(可选),或者指定的 collection 为 null另请参见:contains(Object)

我写了一个测试:
Java code
public class testDateTime {    public static void main(String args[]) {        List<Long> idFromDB = new ArrayList();        List<Long> idFromSolrSearch = new ArrayList();        idFromDB.add(1L);        idFromDB.add(2L);        idFromDB.add(3L);        idFromSolrSearch.add(1L);        idFromSolrSearch.add(2L);        if (idFromDB.containsAll(idFromSolrSearch)) {            System.out.println("true");        } else {            System.out.println("false");        }    }}

为什么这个又是打印true的呢?我是新手小白,请老师指点我一下,谢谢

[解决办法]
看一下Java享元模式。
考虑整数-128到127,而这个范围是在一个字节之中。这个范围的整数在开发我们可能要经常用到。所以呢,为了执行效率和节省内存空间。大家调用的时候,创建的对象值在这个范围中时,java所指向的是同一个对象
[解决办法]
junit测试代码

Java code
@Test    public void containsAllTest(){        List idFromDB = new ArrayList();        List idFromSolrSearch = new ArrayList();        idFromDB.add(1);        idFromSolrSearch.add("1");        System.out.println("idFromDB: "+idFromDB);        System.out.println("idFromSolrSearch: "+idFromSolrSearch);        System.out.println(idFromDB.containsAll(idFromSolrSearch));    } 

读书人网 >Java相关

热点推荐