日期:2014-05-17  浏览次数:20590 次

两个list求交集 求不出来
我用list1取出一个文章对象的集合,用list2也取出一个文章对象的集合,但是当我用list1.retainAll(list2);
之后我再取出list1的时候,list居然没数据。后来我查看了list.size(),结果却是size为0,但是list1与list2确实是有交集啊,为什么取完交集后,交集为空啊?求各位大侠指教。。

------解决方案--------------------
目测可能是list1,list2取的文章对象不是同一个对象,文章对象应该需要重写下equals和hashcode方法
------解决方案--------------------
文章对象重写一下public boolean equals(Object obj);方法,根据自己的条件判断相等。
------解决方案--------------------
引用:
Quote: 引用:

目测可能是list1,list2取的文章对象不是同一个对象,文章对象应该需要重写下equals和hashcode方法

你能仔细的再说下吗?谢拉


主要重写文章对象的equals(文章){文章.内容.equals(this.文章内容){return true;}else{return false}}
这里根据你需要怎么样就认为文章相同就去做相应的判断
hashcode方法也重写一下不需要做修改
楼主可以在网上搜下 java 比较对象相等的 很多
------解决方案--------------------
兄弟,你估计搞错这个方法的作用了哦。

retainAll (包含将保留在此列表中的元素的 collection)


public static void main( String[] args )
    {
     List<String> list1=new ArrayList<String>();
     list1.add("1");
     list1.add("2");
     list1.add("3");
     list1.add("4");
    
     List<String> list2=new ArrayList<String>();
     list2.add("2");
     list2.add("4");
     list2.add("6");
    
     if(list1.retainAll(list2)){
     //此处List1 只会存在存在2,4两个元素。
     //retainAll (将会把list2中与list1匹配的数据存放到list1中去 
     System.out.println("writable"+list1.size());
     }else{
     System.out.println( "Hello World!" );
     }
    }