java如何获取元素在ArrayList中出现的次数
for(int i=0; i<arr.size(); ++i){
oc = Collections.frequency(arr, arr.get(i));
System.out.print(oc + " "+ arr.get(i) +" ");
arr.remove(i);
}
其主要思想是输出序列中每个元素发生的次数。 比如说
1 1 2 3 3 3 10 10
这里是输出
2 1 1 2 3 3 2 10
它就像两个1,一个元素是2,三个元素是3,两个元素是10
例如,这是buggy,它不适用于本案例
1 1 1 2 2 1 1 1
怎么了?还有其他算法吗
# 1 楼答案
快速而聪明的方法是 1) 使用集合对arrayList进行排序。分类 2) 使用indexOf()获取第一个索引,使用lastIndexOf()方法获取最后一个索引 3) 索引差为2将给出给定对象在ArrayList中的出现次数
# 2 楼答案
我将使用HashMap,而其含义是元素->;计数伪:
在此之后,hashmap将保存所有元素及其计数
# 3 楼答案
问题是在
for
循环中删除了一个元素(arr.remove(i)
),因此剩余的元素会移位,当i
增加时,会跳过一个元素。删除元素也会改变其频率,所以不要这样做这样做:
如果某个元素多次出现在列表中,则会将其打印多次。使用^{} 来记住元素是否已打印,不要再次打印:
输出:
另类
或者,您可以将原始列表中的所有元素添加到
Set
(这将确保每个元素只包含一次),并在该集合上迭代,但在原始数组中计数:输出:相同但请注意,这可能会导致不同的输出顺序,因为Java中的
Set
没有顺序# 4 楼答案
试试这个
输出