您的位置:首页 > 职场人生

朋友的一道面试题

2014-08-04 18:27 141 查看


现在有两个数据列

 A :1,5,4,2,7,19,44,98,20,3,55

 B :5,55,6,8,19,44,33,22,17    

 编程输出没有同时存在于两个数据列中的数据 

有人在做此题目的时候,由于大意,所以,造成此题不对,这是第一次出错的代码



下来讲解此题的正确解法:

package com.daqinlingnan.test2;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
现在有两个数据列
A 1,5,4,2,7,19,44,98,20,3,55
B 5,55,6,8,19,44,33,22,17
编程输出没有同时存在于两个数据列中的数据
*/
public class Test05 {
public static void main(String[] args) {
List<Integer> Alist = new ArrayList<Integer>();
List<Integer> Blist = new ArrayList<Integer>();
int[] a = {1,5,4,2,7,19,44,98,20,3,55};
int[] b = {5,55,6,8,19,44,33,22,17};
for (int a1 : a) {
//循环向集合A添加数组里面的元素
Alist.add(a1);
}
for (int b1 : b) {
//循环向集合B添加数组里面的元素
Blist.add(b1);
}
//		System.out.println("Alist:"+Alist);
//		System.out.println("Blist:"+Blist);
Map<Integer,Integer> map = new HashMap<Integer, Integer>();
//此处的功能是:把第一个集合的值复制给map的value,并且设置值为1
for (int aa1 : Alist) {
map.put(aa1, 1);
}
for (int bb1 : Blist) {
//从集合B里面的元素作为map中的key,判断是否有值
Integer num = map.get(bb1);
//如果判断有值,则表明该元素在集合Map中已经存在,那么,我们可以把value值进行+1,以此区别value=1的情况
if (num != null) {
map.put(bb1, ++num);
continue;
}
//如果判断没有值,则表明该元素在集合A中不存在,我们可以把它也设置成1
map.put(bb1, 1);
}
//讲Map集合里面的数据复制到集合li3
List<Integer> li3 = new ArrayList<Integer>();
for (Map.Entry<Integer, Integer> mm : map.entrySet()) {
//当value值是1的时候,表明没有同时存在于两个数据列中的数据
//当value值是2的时候,可以获取两个数据列中相同的数据(可以尝试一下mm.getValue() == 2的情况)
if (mm.getValue() != 2) {
li3.add(mm.getKey());
}
}
//循环获取集合li3里面的数据,就是我们所需要的数据
for (Integer s: li3) {
System.out.print(s+",");
}
}
}


获得结果是:

1,2,33,3,4,98,6,7,8,17,20,22,

结果正确
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程