如何在arraylist中找到相同整数的倍数?

Jul*_*lio 5 java integer loops arraylist

我的问题如下.我有一个整数的arraylist.arraylist包含5个int,例如[5,5,3,3,9]或者[2,2,2,2,7].许多arraylists有重复的值,我不确定如何计算每个值存在多少.

问题是如何在arraylist中找到重复值并计算有多少特定副本.在第一个例子[5,5,3,3,9]中有2个5和2个.[2,2,2,2,7]的第二个例子只有4 2.我希望找到的结果信息是,是否有任何重复信息,其中有多少个以及重复了哪个特定的整数.

我不太确定如何在java中这样做.

任何帮助将非常感激.谢谢.

Lar*_*ren 6

对我来说,最直接的答案就是使用这种Collections.frequency方法.有点像这样:

// Example ArrayList with Integer values
ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(2);
intList.add(2);
intList.add(2);
intList.add(2);
intList.add(7);

Set<Integer> noDupes = new HashSet<Integer>();
noDupes.addAll(intList); // Remove duplicates

for (Integer i : noDupes) {
    int occurrences = Collections.frequency(intList, i);
    System.out.println(i + " occurs " + occurrences + " times.");
}
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您可以Integer使用其出现次数映射每个:

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer i : noDupes) {
    map.put(i, Collections.frequency(intList, i));
}
Run Code Online (Sandbox Code Playgroud)


Tom*_*ine 5

脑海中浮现出两种算法.

对它进行排序(Collections.sort).然后迭代通过轻松找到欺骗.

通过保持计数Map<Integer,Integer>(或Map<Integer,AtomicInteger>可变计数)来迭代.这样有点难看.

无论哪种方式,编码它应该是一个有益的练习.我建议做两件事,并进行比较.

  • #2上的变化:迭代一次以填充地图(在示例中)[5,0],[3,0],[9,0]; 然后第二次通过获得计数.我发现这个逻辑比在每个点检查该值是否已经是地图的关键字更简单. (2认同)