关于containsAll方法的有关问题?
关于containsAll方法的问题???
发生了一个好奇怪的问题,我用List里面的一个containsAll方法来比较2个list是不是一样的,结果明明一样的2个list他居然给我返回一个false
控制台打印的信息是:
###########idFromDB 1 ###########
2566
###########idFromSolrSearch 1 ###########
2566
idFromDB:[2566]
idFromSolrSearch:[2566]
我看过api了:
我写了一个测试:
为什么这个又是打印true的呢?我是新手小白,请老师指点我一下,谢谢
------解决方案--------------------
看一下Java享元模式。
考虑整数-128到127,而这个范围是在一个字节之中。这个范围的整数在开发我们可能要经常用到。所以呢,为了执行效率和节省内存空间。大家调用的时候,创建的对象值在这个范围中时,java所指向的是同一个对象
------解决方案--------------------
junit测试代码
发生了一个好奇怪的问题,我用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
containsAll boolean 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)); }