JAVA 中 2个ArrayList 比较~

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 中 2个ArrayList 比较~相关的知识,希望对你有一定的参考价值。

我有2个ArrayList 其容器为这样: ArrayList<ArrayList<类型>> 下面我需要对这2个list下的所有值进行检索比较,类型里有10种元素,但是我只需要取其中一种(也就是页面控件中的值)进行比较。 首先我遍历2边循环,尝试了使用contains,containsAll,等方法进行比较,但是每次比较都为false 。这里提问下大家有什么好的方法或者是解决方案么?

可以尝试使用 instanceof 进行比较 ArrayList<ArrayList<类型>> 中"类型"一词是否是使用Object代替?麻烦将你的代码贴出来!!例如 : List<Object> list = new ArrayLIist<Object>(); list.add(1); //Integer类型值 list.add("1") ; //String类型值 list.add(1.0d);//Double类型值 for(Object obj : list) if(obj instanceof Integer) Integer integer = (Integer)obj; //将其强转 //Double , String 一致(其它对象都可以这样使用) 参考技术A 网友“水冰暖”的代码观点是对的,但是不能用contains方法,而是用equals方法比较好,因为你的object数组里面放的都是string类型,所以用equals方法可以判断是否相同。

网友“回复还要名字”的代码太片面,只是把list1中的第一个元素与list2里的第一个元素进行了 比较,然后把list1中的第二个元素和list2中的第二个元素比较了,如果你list1先addobj2,然后add obj1,那么他的方法是比较不出来的。

楼主的要求很容易实现,有若干种方法能够实现,只不过是需要取一个最优方法而已。我提供一个最容易理解但是比较消耗内存的方法的思路给楼主吧:
在for循环中嵌套一个for循环,在外面的循环中,取出list1中的第一个元素,然后在list2中分别取出每个元素与list1中的第一个元素进行比较,这叫遍历,然后一一比较。由于楼主的list中放的是obj数组,所以可能还需要第三个循环。如果有一次循环结束,而list1中的某个元素obj数组还是没有在list2中找到和自己完全一样的obj数组,那么,就可以断定,当前的obj数组就是list1与list2中不相同的元素了。

楼主追问如果在list2中add了obj5的话会找不到,请问楼主不是要找list1和list2中不一样的吗?list2里面有obj5,list1没有,那肯定list2里面的obj5也是不一样的,怎么找不到了呢?
参考技术B 遍历的时候用双重循环,第一重循环取出最外层的ArrayList,这个时候取出来的值还是一个ArrayList,你用一个List把它装上第二重循环针对List循环,这个时候取出来的值就是<类型>了,把它实例化相应的对象,得到对象了,取属性比较就很简单了 参考技术C 你说得不是很清楚啊。。我按我的理解写了一个示例,你看看是不是你想要的

ArrayList<ArrayList<String>> outside=new ArrayList<ArrayList<String>>();
for (int i = 0; i < 10; i++)
ArrayList<String> inside=new ArrayList<String>();
inside.add(i+"");
outside.add(inside);

String value="0";
for (int i = 0; i < outside.size(); i++)
for (int j = 0; j < outside.get(i).size(); j++)
if(value.equals(outside.get(i).get(j)))
System.out.println("0的时候是真的");


参考技术D contains能用,但是要用contains就没必要两次循环了,就一次就行了!

以上是关于JAVA 中 2个ArrayList 比较~的主要内容,如果未能解决你的问题,请参考以下文章

Java中ArrayList的使用

Java集合框架01

JAVA 算法---桶排序算法与基数排序算法

java Error establishing socket

Array.list添加元素

C#中数组与ArrayList的简单使用