从ArrayList获取重复数量

时间:2012-03-05 22:43:52

标签: java arraylist duplicates

例如,假设我有ArrayList可能包含以下值:

x
x
x
y
y

现在我要检索的是xx的数量,我希望能够区分我拥有的xy因为实际上,我可以在ArrayList中有任何对象,我必须能够区分它们。

我想要做的是首先将ArrayList转换为LinkedHashSet,这将保留排序并删除重复项,以便我只有x和{{1}但是我如何获得每个的数量并将其与正确的元素相关联?

总的来说,我想做的是能够编写一个y方法,让我输出:

toString

但不知道x3y2 x是元素,因为它们可能是yz之类的其他内容。

3 个答案:

答案 0 :(得分:5)

查看google guava中的Multiset:http://docs.guava-libraries.googlecode.com/git-history/v11.0.2/javadoc/com/google/common/collect/Multiset.html

示例:

Multiset<String> strings = HashMultiset.create(arrayList);
int countX = strings.count("x"); // the count of x

可以在Guava wiki上找到更多示例。

答案 1 :(得分:2)

您要做的是使用HashMap<Object, Long>。将Object存储为键,将Long存储为出现次数。

这里有一些伪代码可以做你想做的事。

for(x in list) {
 if(x in Map) {
   map.put(x, map.get(x)++);
 } else {
   map.put(x, 1);
 }
}

然后,您可以遍历Map并打印值和出现次数。我会让你写那个。这很容易。

答案 2 :(得分:0)

嗯,为此你可以做的是从最后遍历list。保留一个计数器并继续检查对象的变化。一旦检测到更改,请使用current position + 1替换计数器中的数字。这样做直到你到达第一个位置。