使用HashMap查找两个大小相等的数组中相似元素的数量

时间:2016-05-17 20:57:36

标签: java arrays hashmap

我编写了代码来查找两个数组中出现的公共元素的数量,但是我的输出只给出了我声明的数组的大小。任何人都可以在我的代码中指出错误吗?

 import java.io.*;
 import java.util.*;

 public class arreq1 {
     public static void main(String args[]){
         Scanner in = new Scanner(System.in);
         HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
         //int t = in.nextInt();
         int n = in.nextInt();
         int p[] =new int[n]; 
         int c[] =new int[n];
         int count=0;
         for(int i=0;i<n;i++)
             p[i] = in.nextInt();
         for(int k=0;k<n;k++){
             c[k] = in.nextInt();
         }
         for(int j=0;j<p.length;j++){
             hm.put(p[j],j);
             if(hm.containsKey(c[j]));
             count++;
         }
         System.out.println(count);
    }
}

1 个答案:

答案 0 :(得分:0)

if(hm...)行末尾有一个额外的分号。否则,if语句只控制空语句;的执行,而不控制下一行的count++;

此外,您必须将最后一个for循环拆分为两个单独的循环,否则它将找到部分公共元素。例如,当j = 0时,只有c[0] == p[0]而不是c[0] == any p[0 .. n-1]才会增加计数。

其他一些改进:您可以使用HashSet而不是HashMap。您还可以使用其他Java集合实用程序为您完成艰苦的工作,例如(未经测试):

import java.io.*;
import java.util.*;
public class arreq1 {
  public static void main(String args[]){
    Scanner in = new Scanner(System.in);
    Set<Integer> ps = new HashSet<Integer>();
    List<Integer> cl = new ArrayList<Integer>();
    //int t = in.nextInt();
    int n = in.nextInt();
    int p[] =new int[n]; 
    int c[] =new int[n];
    int count=0;
    for(int i=0;i<n;i++)
      p[i] = in.nextInt();
    for(int k=0;k<n;k++){
      c[k] = in.nextInt();
    }
    for(int j=0;j<p.length;j++){
      ps.add(p[j]);
      cl.add(c[j]);
    }
    // remove entries in cl that do not exist in ps
    cl.retainAll(ps);
    count = cl.size();
    System.out.println(count);
  }
}