我需要通过一个数组列表并将数组的每个元素与同一数组的所有元素进行比较,并知道哪个元素重复更多次;我有这样的东西
for (int x = 0; x < lista1.size(); x++) {
int temp = lista1.get(x);
for (int y = 0; y < lista1.size(); y++) {
if (temp == lista1.get(y)) {
System.out.println("temp"+temp);
System.out.println(lista1.get(y));
rep = rep + 1;
lista3.add(temp);
lista3.add(rep);
rep = 0;
}
}
问题是它使我成为每个人的一个,并且没有将每个 x 与所有 y 进行比较。如果您对如何做到这一点有更好的了解,我将不胜感激。
当列表中的元素重复时,您将遇到问题,您的重复总数将增加一倍。
要使用迭代方法,您可以有两个变量,
repe
它们是列表中某个数字的重复总数,k 作为辅助列表的索引。我们遍历列表,获取元素,然后在第二个中迭代,除了典型的条件外,
i< n
还检查辅助列表不包含!contains
该元素,因为如果它已经包含它,则意味着它是一个已经被评估过的元素。我们避免迭代在内部的末尾,我们比较重复次数大于 0,如果是这样,我们将元素添加到辅助列表中,我们增加索引
k
,我们打印,然后我们将计数器重置为 0一种方法是使用,通过collect
Stream
方法执行初始的减少,它基本上会将其减少为一个Key Grouping,将分配给的值,其中 key 将是单词,而 value 是总重复次数,为此,它使用了Collectors类的计数方法lista
Map
您的代码有几个逻辑问题。
我不明白你为什么说它不将所有 x 与所有 y 进行比较,因为这就是它正在做的事情。
但是,当您将所有内容进行比较时,任何代表都会为您增加一倍。
请注意,对于此数组:{1,1,2,2}
您将比较:
1 有 1 好(反对自己) 1 有 1 好(第二个 1) 1 有 2 没有 1 有 2 没有
然后进入第二个 1 1 有 1 好 1 有 1 好(反对自己) 1 有 2 没有 1 有 2 没有
做这种事,总是往前比较。换句话说,从你所处的位置,你总是从x+1开始比较,所以你避免和自己比较,你也避免比较你已经比较过的东西。
另外,你不应该比较你已经比较过的项目。一旦你检查了1,你不应该再检查它。
并且要知道哪个重复次数更多,您所要做的就是有一个带有重复次数的变量,然后与您在这种情况下找到的重复次数进行比较......
使用此方法,您可以计算每个数字重复的次数。
测试方法:
离开:
我制作了一个函数来获取列表中可能对您有用的总重复次数。在下面的示例中,我创建了一个 for 循环来遍历列表“list1”,并使用 getRepetitions 函数检查该数字重复了多少次,然后通过终端输出它。