假设我们有一个元素数组列表, 我们可以通过多种方式计算元素的出现次数。
哈希图
该数据结构使用哈希函数将相似的值(称为键)映射到它们的关联值。可以使用键检索地图值, 因为它包含键值对。
//Java program to count frequencies of elements
//using HashMap.
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.*;
class GFG {
public static void countFrequencies(ArrayList<String> list)
{
//hashmap to store the frequency of element
Map<String, Integer> hm = new HashMap<String, Integer>();
for (String i : list) {
Integer j = hm.get(i);
hm.put(i, (j == null ) ? 1 : j + 1 );
}
//displaying the occurrence of elements in the arraylist
for (Map.Entry<String, Integer> val : hm.entrySet()) {
System.out.println( "Element " + val.getKey() + " "
+ "occurs"
+ ": " + val.getValue() + " times" );
}
}
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<String>();
list.add( "Geeks" );
list.add( "for" );
list.add( "Geeks" );
countFrequencies(list);
}
}
输出如下:
Element Geeks occurs: 2 times
Element for occurs: 1 times
哈希集
此数据结构在实现时不允许重复的元素设置界面。根据对象的哈希码插入对象。
为了计算ArrayList元素的出现次数, 我们创建HashSet并添加ArrayList的所有元素。我们用Collections.frequency(Collection c, 对象o)计算集合中对象o的出现c。
下面的程序说明了HashSet的工作:
查找单词出现的程序
//Java program to count frequencies of elements
//using HashSet and Collections.frequency.
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.*;
class GFG {
public static void countFrequencies(ArrayList<String> list)
{
//hash set is created and elements of
//arraylist are insertd into it
Set<String> st = new HashSet<String>(list);
for (String s : st)
System.out.println(s + ": " + Collections.frequency(list, s));
}
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<String>();
list.add( "Geeks" );
list.add( "for" );
list.add( "Geeks" );
countFrequencies(list);
}
}
输出如下:
Geeks: 2
for: 1
树状图
此数据结构按排序顺序存储唯一元素。它使用了红黑树在后台防止重复。
//Java program to count frequencies of elements
//using HashMap.
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.*;
class GFG {
public static void countFrequencies(ArrayList<String> list)
{
TreeMap<String, Integer> tmap = new TreeMap<String, Integer>();
for (String t : list) {
Integer c = tmap.get(t);
tmap.put(t, (c == null ) ? 1 : c + 1 );
}
for (Map.Entry m : tmap.entrySet())
System.out.println( "Frequency of " + m.getKey() + " is " + m.getValue());
}
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<String>();
list.add( "Geeks" );
list.add( "for" );
list.add( "Geeks" );
countFrequencies(list);
}
}
输出如下:
Frequency of Geeks is 2
Frequency of for is 1
关键点:
- HashMap实现Map接口, 而TreeMap实现SortedMap Interface。
- HashMap使用散列, 而TreeMap使用红黑树(平衡BST)。所以基于HashMap的解决方案通常比基于TreeMap的解决方案要快得多.