您的位置:首页 > 编程语言 > Java开发

求两个数组的交集 ->可以使用HashMap做

2016-08-05 19:21 471 查看
求两个数组的交集

思路:

1,第一个数组的元素放入hashmap中,令值为1(不论是否重复).

2. 循环检验第二个数组的元素,判断hashmap中是否已经存在该值(m.getKey(a2[i])),存在则value更新为2.

3. 将hashmap值为2的元素的key放到list中( if(e.getValue()==2)list.add(e.getKey()); ) ,变成数组(toArray()方法)后返回.

package com.yuxin.learn;

import java.security.KeyStore.Entry;
import java.util.*;

public class Main {

public static Integer[] interset(int[] a1,int[] a2){
int len1 = a1.length;
int len2 = a2.length;
int len = a1.length+a2.length;
Map<Integer,Integer> m = new HashMap<Integer,Integer>(len);
LinkedList<Integer> ret = new LinkedList<Integer>();
for(int i=0;i<len1;i++){
if(m.get(a1[i])==null)
m.put(a1[i], 1);
}
for(int i=0;i<len2;i++){
if(m.get(a2[i])!=null)
m.put(a2[i],2);
}
for(java.util.Map.Entry<Integer, Integer> e:m.entrySet()){
if(e.getValue()==2){
ret.add(e.getKey());
}
}
Integer[] retArray={};
return ret.toArray(retArray);
}
public static void main(String[] args) {
int M=4;
int N=6;
ArrayList<Integer> l1 = new ArrayList<Integer>();
ArrayList<Integer> l2 = new ArrayList<Integer>();
Scanner scanner = new Scanner(System.in);
/*System.out.println("输入两个数组l1,l2,输入-1结束");
System.out.println("l1:");
int get = 0;
for(int i=0;i<M;i++){
get = scanner.nextInt();
l1.add(get);
}
for(int i=0;i<N;i++){
get = scanner.nextInt();
l2.add(get);
}
System.out.println(l1);
System.out.println(l2);*/
int a1[] = {45, 5, 2, 5,2334};
int a2[] = {2, 5, 2, 52, 5, 2334,22};
Integer[] r = interset(a1,a2);
for(Integer i:r){
System.out.println(i);
}
}

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