Java计算list元素的出现次数

2021年4月15日19:01:23 发表评论 1,171 次浏览

假设我们有一个元素数组列表, 我们可以通过多种方式计算元素的出现次数。

哈希图

数据结构使用哈希函数将相似的值(称为键)映射到它们的关联值。可以使用键检索地图值, 因为它包含键值对。

//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的解决方案要快得多.

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: