Java计算list元素的出现次数

假设我们有一个元素数组列表, 我们可以通过多种方式计算元素的出现次数。
哈希图
该数据结构使用哈希函数将相似的值(称为键)映射到它们的关联值。可以使用键检索地图值, 因为它包含键值对。

//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 timesElement for occurs: 1 times

【Java计算list元素的出现次数】哈希集
此数据结构在实现时不允许重复的元素设置界面。根据对象的哈希码插入对象。
为了计算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: 2for: 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 2Frequency of for is 1

关键点:
  • HashMap实现Map接口, 而TreeMap实现SortedMap Interface。
  • HashMap使用散列, 而TreeMap使用红黑树(平衡BST)。所以基于HashMap的解决方案通常比基于TreeMap的解决方案要快得多.

    推荐阅读