Java 如何计算数组/列表中特定元素的出现次数
我是java新手,正在用java开发一个小应用程序,现在我陷入了困境。我有一个名为Candidate的自定义类。它看起来像:Java 如何计算数组/列表中特定元素的出现次数,java,Java,我是java新手,正在用java开发一个小应用程序,现在我陷入了困境。我有一个名为Candidate的自定义类。它看起来像: ============================= |Candidate Class | ============================= |Private Members: | |Node Array | |IsValid Bool | -------
=============================
|Candidate Class |
=============================
|Private Members: |
|Node Array |
|IsValid Bool |
-----------------------------
|Public Methods: |
|AddCandidateNode |
|SetIsValid |
|ComparisonOperatorOverloaded|
=============================
现在我有一个数组,包含所有候选对象的列表,我想知道数组中每个候选对象的出现频率。我想到的一种方法是编写两个循环,并使用重载方法进行比较。但我不想用这个。所以我只想确认一下,有没有任何内置的方法可以为我做同样的事情?这是一个经典的问题。解决方案是使用一个映射,其中键是数组中的项,值是计数 psuedocode中接近Java的代码如下所示:
Map<Candidate, Integer> map = new HashMap<Candidate, Integer>();
for (Candidate c: Candidates) {
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
Map Map=newhashmap();
(候选人c:候选人){
if(图c){
map.put(c,map.get(c)+1);
}否则{
图.put(c,1);
}
}
运行此操作后,计数将出现在地图中。我想除了在
数组列表中循环之外,没有其他方法
我将向您展示我很久以前为该场景编写的一种简单方法:)
假设您已经为Candidate
类实现了hashcode()
和equals()
函数
HashMap<Candidate,Integer> counter = new HashMap<Candidate,Integer>();
for( Candidate can : andidateArray ){
if(counter.get(can) == null){
counter.put(can,1);
}else{
counter.put( can, counter.get(can) + 1 );
}
}
HashMap计数器=新的HashMap();
for(候选can:andidateArray){
if(counter.get(can)==null){
计数器。放置(罐,1);
}否则{
counter.put(can,counter.get(can)+1);
}
}
如果要查找特定元素的频率,有一种更简单的方法:
final String[] fruits = { "apple", "orange", "pear", "apple" };
final List<String> fruitList = Arrays.asList(fruits);
System.out.println(Collections.frequency(fruitList, "apple")); // Prints 2
final String[]fruits={“apple”、“orange”、“pear”、“apple”};
最终列表水果列表=Arrays.asList(水果);
System.out.println(Collections.frequency(水果列表,“苹果”);//印刷品2
您可以使用:
Multiset counter=HashMultiset.create(Arrays.asList(“apple”、“apple”、“orange”);
Collection类中的这个API对我来说是新的。谢谢分享
Multiset<String> counter = HashMultiset.create(Arrays.asList("apple","apple","orange"));