从ArrayList获取重复数
例如,假设我有一个可以包含以下值的ArrayList
:
x x x y y
现在我要检索的是x
和x
的数量,我希望能够区分我拥有的x
或y
因为实际上,我可以在ArrayList中有任何对象,我必须能够告诉他们分开。
我想要做的是首先将ArrayList
转换为LinkedHashSet
,这将保持排序并删除重复项,因此我只有x
和y
但是我如何得到每个的数量并将其与正确的元素相关联?
总的来说,我想要做的是能够编写一个让我输出的toString
方法:
x3y2
但是不知道x
和y
是元素,因为它们可能是z
或w
类的东西。
查看google guava中的Multiset: http : //docs.guava-libraries.googlecode.com/git-history/v11.0.2/javadoc/com/google/common/collect/Multiset.html
例:
Multiset strings = HashMultiset.create(arrayList); int countX = strings.count("x"); // the count of x
可以在番石榴维基上找到更多示例。
你想要做的是使用HashMap
。 将Object存储为键,将Long存储为出现次数。
这里有一些伪代码可以做你想做的事情。
for(x in list) { if(x in Map) { map.put(x, map.get(x)++); } else { map.put(x, 1); } }
然后,您可以遍历Map并打印值和出现次数。 我会让你写那个。 这很容易。
那么,为此你可以做的是从最后遍历list
。 保留一个计数器并继续检查对象的变化。 一旦检测到更改,请将计数器中的数字替换为current position + 1
。 这样做直到你到达第一个位置。