java 比较两个list数组问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 比较两个list数组问题相关的知识,希望对你有一定的参考价值。

如题所示 java 比较两个list数组问题

list1 里面的值是(12,34,25,58,69,78)
list2 里面的值是(1,54,25,69,78)
比较 list1 和 list2

最后想得到的结果是从小到大排序 没有重复(1,12,25,34,54,58,69,78)
求代码
尽量不要改变 List 类型 ,另外 list1 里面的值 是通过读路径读出来的值,所以里面不是 Integer 类型。

我这有种解法:
1、将list1和list2进行合并,在合并过程中去重。
2、用Collections.sort()进行排序就行了。代码如下:
List<Integer> list = new ArrayList<Integer>();
for (Integer i : list2)
if (list.indexOf(i) == -1)
list.add(i);


for (Integer i : list1)
if (list.indexOf(i) == -1)
list.add(i);


Collections.sort(list);
参考技术A 说一点个人想法,用两个for第一个for(int i=0,i<list1.size(),i++)取出 n=list1.get(i),与第二个x=for(int j=0,j<list2.size(),j++)这样l进行一第一个for(i)的时候n将会与list2.size()个x相比较,你就比较一个是否相等,如果有相等的,不操作,如果没有相等的,就把list1.get(i)放进list2里面,list2.add(list1.get(i))这样当for(i)完了以后不相同的数就全部到了list2里面,然后对这个list2进行一个冒泡排序,就行了 ,如果你不是一个懒家伙看着我说的应该就做得出了 参考技术B 你这样的问题怎么做?尽量不改变list类型什么意思嘛?我可以理解为重新建个list,然后将list1和list2比较得到的值放进刚建的list里?或者是比较后直接输出?不管怎么做了,我可以这么去做不?取list1.get(i)和list2.get(j)来比较,如果小的先入list里,而大的留着继续比较,相同的就选择list1.get(i)或者list.get(j)的一个放进list里。不过先得排下原来给的list的序吧?下面按着我这个思想编个程序你吧!
public class ListSort
public static void main(String[] args)
List<Integer> list1 = new ArrayList<Integer>();
list1.add(34);
list1.add(69);
list1.add(25);
list1.add(12);
list1.add(58);
list1.add(78);
List<Integer> list2 = new ArrayList<Integer>();
list2.add(1);
list2.add(54);
list2.add(25);
list2.add(69);
list2.add(78);
List list = new ListSort().sort(sortList(list1),
sortList(list2));
int length = list.size();
for(int i=0;i<length;i++)
System.out.print(list.get(i)+" ");



private static List<Integer> sortList(List<Integer> list)
List<Integer> resultList = new ArrayList<Integer>();
int length = list.size();
for(int i=0;i<length;i++)
int count = 0;
for(int j=i+1;j<length;j++)
if(list.get(i)>list.get(j))
list.add(i, list.get(j));
list.remove(j+1);



for(int i=0;i<length;i++)
System.out.print(list.get(i)+" ");

return resultList;


public List sort(List<Integer> list1,List<Integer> list2)
List<Integer> list = new ArrayList<Integer>();
int i = 0;
int j = 0;
int length_i= list1.size();
int length_j= list2.size();
while(i<length_i&&j<length_j)
if(list1.get(i)<list2.get(j))
list.add(list1.get(i));
i++;

else if(list1.get(i)==list2.get(j))
list.add(list1.get(i));
i++;
j++;

else if(list1.get(i)>list2.get(j))
list.add(list2.get(j));
j++;


return list;

这里提醒你,你也可以把list1和list2加入一个List里后再比较也行。
参考技术C 上面几位的方法太麻烦了 我这里有个很简单的办法 几行代码搞定:

HashSet<Integer> hSet = new HashSet<Integer>(); //用set是为了去掉重复元素

for (Integer i : list1)
hSet.add(i);

for (Integer i : list2)
hSet.add(i);

ArrayList<Integer> list = new ArrayList<Integer>(hSet); //这里满足结果为list

Collections.sort(list); //这里排序

你最后打印下list的内容 就是你要的输出结果
参考技术D 方法1:
合并两个list为1个list,然后使用冒泡、比较等排序法排序
方法2:
转化为数组 很容易,进行排序,排序完再转化为list

方法有了,自己写代码吧

以上是关于java 比较两个list数组问题的主要内容,如果未能解决你的问题,请参考以下文章

如何比较两个对象数组以删除重复项?

Java比较两个String字符串数组

Java-数组集合常见面试题

java中怎么取两个数组中不相同的数据?

java中两个list对比有啥好办法?

如何将数组列表的相等性与现代 Java 进行比较?