思路:
1.首先将两个数组A、B排序(递增)
2.分别从A和B中各取出一元素a,b,对a和b进行比 较:
1) 如果a与b相等,则将a或b存入一指定集合中 相同的
2)如果a小于b,则继续取A的下一元素,再与b比 较
将a的元素放入一个新的集合中,为A与B不同的元素
3) 如果a大于b,则取B的下一个元素,与a进行比较
将b的元素放入一个新的集合中,为B与A不同的元素
3.反复进行步骤2,直到A或B的元素都比较完
4.若两个数组长度不一致,则遍历获取较长数组的未遍历部分,放入其对应集合中,该集合为该数组独自拥有的不同元素的集合
5.将集合存放近map中,返回map
public Map<String,List<String>> getCompareElement(String[] strArr1,String[] strArr2)
{
Map<String,List<String>> map = new HashMap<String, List<String>>();
if(strArr1 == null || strArr2 == null) {
return null;
}
Arrays.sort(strArr1);
Arrays.sort(strArr2);
List<String> sameList = new ArrayList();
List<String> strArr1Def = new ArrayList();
List<String> strArr2Def = new ArrayList();
int k = 0;
int j = 0;
while(k<strArr1.length && j<strArr2.length) {
if(strArr1[k].compareTo(strArr2[j])==0) {
if(strArr1[k].equals(strArr2[j]) ) {
sameList.add(strArr1[k]);
k++;
j++;
}
continue;
} else if(strArr1[k].compareTo(strArr2[j])<0){
strArr1Def.add(strArr1[k]);
k++;
} else {
strArr2Def.add(strArr2[j]);
j++;
}
}
if(k<strArr1.length && j==strArr2.length){
for(int i = k;i<strArr1.length ;i++){
strArr1Def.add(strArr1[i]);
}
}
if(k==strArr1.length && j<strArr2.length){
for(int i = j;i<strArr2.length ;i++){
strArr2Def.add(strArr2[i]);
}
}
map.put("sameList", sameList);
map.put("strArr1Def", strArr1Def);
map.put("strArr2Def", strArr2Def);
return map;
}