📌  相关文章
📜  计算Java中列表元素的出现次数

📅  最后修改于: 2022-05-13 01:55:39.395000             🧑  作者: Mango

计算Java中列表元素的出现次数

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

哈希映射

此数据结构使用散列函数来映射相似的值,称为关联值的键。映射值可以使用键检索,因为它包含键值对。

// 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 list)
    {
        // hashmap to store the frequency of element
        Map hm = new HashMap();
  
        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 val : hm.entrySet()) {
            System.out.println("Element " + val.getKey() + " "
                               + "occurs"
                               + ": " + val.getValue() + " times");
        }
    }
  
    public static void main(String[] args)
    {
        ArrayList list = new ArrayList();
        list.add("Geeks");
        list.add("for");
        list.add("Geeks");
        countFrequencies(list);
    }
}
输出:
Element Geeks occurs: 2 times
Element for occurs: 1 times
哈希集

此数据结构不允许重复元素,因为它实现了 Set 接口。对象根据其哈希码插入。

为了计算 ArrayList 元素的出现次数,我们创建 HashSet 并添加 ArrayList 的所有元素。我们使用 Collections.frequency(Collection c, Object 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 list)
    {
  
        // hash set is created and elements of
        // arraylist are insertd into it
        Set st = new HashSet(list);
        for (String s : st)
            System.out.println(s + ": " + Collections.frequency(list, s));
    }
  
    public static void main(String[] args)
    {
        ArrayList list = new ArrayList();
        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 list)
    {
  
        TreeMap tmap = new TreeMap();
        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 list = new ArrayList();
        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 接口。
  • HashMap 使用散列,而 TreeMap 使用红黑树(平衡 BST)。因此,基于 HashMap 的解决方案通常比基于 TreeMap 的解决方案快得多