Java,Map集合应用,输入n个单词输出出现次数最多的单词

代码如下:

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        ArrayList<String> list= new ArrayList<>();
        Map<String, Integer> m = new HashMap<>();
        for (int i = 1; i <= n; i++) // 存放单词
        {
            String s = sc.next();
            list.add(s);
        }
        for(String s : list) // 遍历list集合
        {
            if(m.containsKey(s)) // 看看Map中的键包含s这个字符串吗?
            {
                 int count = m.get(s); // 包含证明重复,取出次数家1然后再丢进去覆盖之前的次数
                 count++;
                 m.put(s,count);
            }
            else // 不包含就是第一次,把字符串丢进去并且次数为1
            {
                m.put(s, 1);
            }
        }
        System.out.println(m);
        int max = -1;
        Set<String> s = m.keySet(); // Map的键转为集合再进行遍历
        for (String str : s)
        {
            if(m.get(str) > max) // 通过Set里面的键得到值
            {
                max = m.get(str); // 值赋值给max
            }
        }
        System.out.println(max); // 得到最大值

        for(String str : s) // 增强for遍历
        {
            // 通过Set集合里面的字符串变为键,然后得到值与max相等我们就打印Set集合中字符串
            if(m.get(str) == max)
                System.out.println(str);
        }
    }


}
### 回答1: 可以使用 HashMap 来统计单词出现次数。例如: ``` import java.util.HashMap; import java.util.Map; public class WordCount { public static void main(String[] args) { String text = "This is a sentence. This is another sentence."; String[] words = text.split(" "); Map<String, Integer> wordCount = new HashMap<>(); for (String word : words) { wordCount.put(word, wordCount.getOrDefault(word, 0) + 1); } System.out.println(wordCount); } } ``` 在这个例子中,我们将文本拆分成单词数组,然后遍历单词数组并使用 HashMap 统计每个单词出现次数。getOrDefault() 方法可以在单词不存在于 HashMap 中时返回 0。 ### 回答2: Java中的Map可以理解为一种关联数组(Associative Array),是一种将键(Key)映射到值(value)的数据结构。其中,HashMap是一种使用哈希表实现的Map,它能够对键值进行快速的查询、添加和删除操作。利用HashMap可以统计各单词出现次数。下面详细讲解一下这一过程。 假设我们有一段文本: text = "Java是一种面向对象的编程语言,具有良好的跨平台特性。Java拥有强大的集合框架,其中HashMap是一种使用哈希表实现的Map。" 首先,我们需要将文本转换为单词列表(List),可以使用split方法将文本按照空格进行分割: String[] words = text.split(" "); 接下来,我们创建一个HashMap对象,用于存储各个单词出现次数Map<String, Integer> map = new HashMap<>(); 然后,我们遍历单词列表,对于每一个单词,我们判断它是否已经在HashMap中存在。如果存在,则将它的计数器加1;如果不存在,则将它添加到HashMap中,并将计数器设置为1。 for (String word : words) { if (map.containsKey(word)) { map.put(word, map.get(word) + 1); } else { map.put(word, 1); } } 最后,我们可以输出结果,得到每个单词出现次数: for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + "出现了" + entry.getValue() + "次"); } 完整代码如下: public class WordCount { public static void main(String[] args) { String text = "Java是一种面向对象的编程语言,具有良好的跨平台特性。Java拥有强大的集合框架,其中HashMap是一种使用哈希表实现的Map。"; String[] words = text.split(" "); Map<String, Integer> map = new HashMap<>(); for (String word : words) { if (map.containsKey(word)) { map.put(word, map.get(word) + 1); } else { map.put(word, 1); } } for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + "出现了" + entry.getValue() + "次"); } } } 输出结果如下: 一种出现了1次 Java出现了2次 是出现了1次 面向对象的出现了1次 编程语言,具有良好的跨平台特性。Java出现了1次 拥有出现了1次 强大的集合框架,其中HashMap出现了1次 Map出现了1次 可以看到,我们成功地统计了各个单词出现次数。而且,由于HashMap的快速查询特性,这一过程的时间复杂度为O(n),非常高效。 ### 回答3: 哈希表(HashMap)是Java集合类中最常用的一种数据结构,它可以实现键值对的映射关系。那么如何使用HashMap来统计各单词出现次数呢? 一般情况下,我们可以将文本中的单词分离出来,存储在一个字符串数组中。接下来,遍历字符串数组中的每个单词,将单词作为键,出现次数作为对应的值存储在HashMap中。遍历完成后,HashMap中每个键所对应的值即为该单词出现次数。 具体实现步骤如下: 1.定义一个HashMap对象用来存储键值对(单词出现次数): HashMap<String,Integer> wordCount = new HashMap<String,Integer>(); 2.将文本中的单词分离出来,存储在字符串数组中(这里假设分离出来的单词已经存储在words数组中): String[] words = ...; 3.遍历字符串数组中的每个单词,将单词作为键,出现次数作为对应的值存储在HashMap中: for(String word : words){ if(wordCount.containsKey(word)){ wordCount.put(word,wordCount.get(word)+1); }else{ wordCount.put(word,1); } } 4.遍历完成后,HashMap中每个键所对应的值即为该单词出现次数输出HashMap中的所有键值对: for(Map.Entry<String,Integer> entry :wordCount.entrySet()){ System.out.println(entry.getKey()+"出现了"+entry.getValue()+"次"); } 以上四步即可完成利用HashMap统计各单词出现次数的操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值