假设我们有一个元素数组列表, 我们可以通过多种方式计算元素的出现次数。
哈希图
该数据结构使用哈希函数将相似的值(称为键)映射到它们的关联值。可以使用键检索地图值, 因为它包含键值对。
//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的解决方案要快得多.
推荐阅读
- C中char数据类型和char数组的大小
- 如何使用正则表达式检查字符串是否为字母数字()
- 算法题(2的出现次数(从0到n的数字))
- 什么是信息安全(有什么特征?)
- 递归与迭代之间有什么区别()
- PHP Spreadsheet_Excel_Writer setFgColor()函数用法
- u盘里东西删不掉,教您u盘文件删不了怎样办
- 技嘉 bios设置,教您技嘉主板bios如何设置U盘打开
- amd bios设置,教您amd主板bios怎样设置u盘打开