如何计算两个数组中相等值的数量?

时间:2013-03-27 18:29:48

标签: java arrays

例如:

int[] a = [0,1,2,3,4,5];
int[] b = [3,4,5,6,7,8];

count = 3;

数组不必是连续的数字。 如何获得这些数组之间相等的值的数量?

编辑:所以我尝试了以下内容:

List<int[]> w = Arrays.asList(winning);
List<int[]> s = Arrays.asList(F1Select);            
w.retainAll(s);
int equalNums = w.size();

但是我为retainAll行收到以下错误:

Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(Unknown Source)
    at java.util.AbstractList$Itr.remove(Unknown Source)
    at java.util.AbstractCollection.retainAll(Unknown Source)

3 个答案:

答案 0 :(得分:3)

您只需转换为列表,然后使用retainAll找到交集。

List<Integer> aList =  Arrays.asList(a);
List<Integer> bList =  Arrays.asList(b);
aList.retainAll(bList);
return aList.size();

aList将只包含也在bList中的项目,aList的大小可以让你知道计数。

如果您只想要唯一值,则可以将数组转换为Set并执行相同的操作。

答案 1 :(得分:1)

Try this :

 Integer[] a = new Integer[]{0, 1, 2, 3, 4, 5};
 Integer[] b = new Integer[]{3, 4, 5, 6, 7, 8};

  List<Integer> list1 = Arrays.asList(a);
  Set<Integer> commonSet = new TreeSet<Integer>();
     for (Integer i : b) {
         if (list1.contains(i)) {
           commonSet.add(i);
            }
        }

        System.out.println(commonSet.size());

答案 2 :(得分:0)

如果允许您在计算期间使用O(m + n)个额外空间,则可以为每个阵列保留一个HashMap。关键是每个数组元素,值是它出现的次数。一旦计算出每个数字出现的频率,就会将问题简化为比较两个数据。

每当两个映射中都存在一个键时,两个数组中都有一个数字。这些值可以让您确定两个数组中数字的存在次数。