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);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-21
说一点个人想法,用两个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进行一个冒泡排序,就行了 ,如果你不是一个懒家伙看着我说的应该就做得出了
第2个回答  2010-05-21
你这样的问题怎么做?尽量不改变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里后再比较也行。
第3个回答  2010-05-21
上面几位的方法太麻烦了 我这里有个很简单的办法 几行代码搞定:

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的内容 就是你要的输出结果
第4个回答  2010-05-21
方法1:
合并两个list为1个list,然后使用冒泡、比较等排序法排序
方法2:
转化为数组 很容易,进行排序,排序完再转化为list

方法有了,自己写代码吧
相似回答