Java 二维数组中最常见的元素。如何优化?

Java 二维数组中最常见的元素。如何优化?,java,optimization,multidimensional-array,Java,Optimization,Multidimensional Array,我有这个任务,找到int[]]数组中最常见的元素,并打印重复的次数。我解决了这个问题 我的一个朋友说,为()s设置4个s是个坏主意。所以我决定尝试优化它,删除一两个,但找不到办法 这就是: int cnt, element = arr[0][0], numberRepeats = 0;//cnt-counter,what's the element ,how many times it's repeated for (int i = 0; i < arr.length;

我有这个任务,找到int[]]数组中最常见的元素,并打印重复的次数。我解决了这个问题

我的一个朋友说,为()s设置4个
s是个坏主意。所以我决定尝试优化它,删除一两个,但找不到办法

这就是:

     int cnt, element = arr[0][0], numberRepeats = 0;//cnt-counter,what's the element ,how many times it's repeated
     for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {//those two for's are for the current element
            cnt = 0;//counter is nullified
            for (int j2 = i; j2 < arr.length; j2++) {
                for (int k = 0; k < arr[j2].length; k++) {//and those two are the compared element
                    if (arr[i][j] == arr[j2][k]) {//if the current element is the same as the compared element,increase counter
                        cnt++;
                    }
                }

            if (cnt > numberRepeats) {//after the compared element is done comparing and the number of repeats of the current element is more then the lastly checked element
                element = arr[i][j];//we get the element ,and how many times it's repeated
                numberRepeats = cnt;
            }
        }
    }
}
int cnt,element=arr[0][0],numberRepeats=0//cnt计数器,元素是什么,重复了多少次
对于(int i=0;inumberRepeats){//在比较完被比较的元素后,当前元素的重复次数大于最后检查的元素
element=arr[i][j];//我们得到元素,以及它重复了多少次
numberRepeats=cnt;
}
}
}
}
我能想到的唯一优化就是从当前元素开始计数,直到结束


请再给我一些想法。我能找到的所有答案都是针对1D数组的,它们几乎都是相同的代码。

您可以迭代整个数组,并计算映射中每个元素的出现次数

Map<Integer, Integer> elementsCounts = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) {
        Integer count = elementsCounts.get(arr[i][j]])
        if(count == null){
          count = 0
        }
        elementsCounts.put(arr[i][j]], count+1)
    }
}
Map elementsconts=newhashmap();
对于(int i=0;i

现在,它只需要在映射中找到具有最大值的键。

我们需要使用map和Set(设置为标识行中的重复元素),只有使用map才会忽略一种边缘情况,即行中的重复值可能导致计数器增加。最后将被视为一个公共值

总结如下步骤:

  • 使用键作为数组[i][j]的值和映射的值作为计数器填充映射
  • 如果元素在映射中不存在,则添加键值对,Mpa的值作为计数器从1初始化
  • 否则,更新映射中的元素,使计数器递增1
  • 在递增计数器之前,请使用Set检查行中是否存在重复值
  • 最后,使用entrySet()迭代映射,只打印计数器等于数组长度的元素
  • 输入,例如:

    Integer [][] array = {{1,2,3},{1,4,5,5},{1,5,7}};
    
    输出结果:

    {1}
    

    所以,我所需要做的就是了解地图到底是什么:)谢谢:)@KostadinKostadinov。