邑本正今 发表于 2020-3-11 11:03:26

萌新求助 统计字符串字母出现次数

本帖最后由 邑本正今 于 2020-3-11 11:33 编辑

public class TreeMapDemo {
          public static void main(String[] args) {   
   Scanner sc = new Scanner(System.in);   
         System.out.println("请输入一个字符串:");   
         String line = sc.nextLine();   
//创建TreeMap集合,键是Character,值是Integer//         TreeMap<Character, Integer> hm = new TreeMap<Character, Integer>();   
    for (int i = 0; i < line.length(); i++) {   
             char key = line.charAt(i);       //拿得到的每一个字符作为键到TreeMap集合中去找对应的值,看其返回值//      
            Integer value = hm.get(key);      
             if (value == null) {               
               hm.put(key,1);   
               } else {   
       value++;      
             hm.put(key,value);
                }
            }
      }
}


问题:为什么创建好TreeMap集合后,不用先put往集合里添加元素,就可以用 得到的字符作为键在集合里找值?
小小小萌新初学java,望大佬们赐教!

Robinz 发表于 2020-3-12 10:47:39

Integer value = hm.get(key),第一次查找没找到键对应的值的话就会返回null,然后执行hm.put(key,1),设置之前没出现过键的值为1.就好比‘B’字符没出现过, value = hm.get(‘B’)返回null,然后执行hm.put(‘B’,1),下次再有‘B’出现就再更改值。

邑本正今 发表于 2020-3-12 18:58:34

Robinz 发表于 2020-3-12 10:47
Integer value = hm.get(key),第一次查找没找到键对应的值的话就会返回null,然后执行hm.put(key,1),设 ...

谢谢你的热心回答!不过我想问的是我们输入的字符串没有添加进集合里,为什么集合里会有键和对应的值供我们用字符查找呢? 是不是说当我们第一次用取出的字符在集合里找值,字符当集合里的键,而默认将取出字符后剩余的字符串仍然放在集合里,把取出的字符 在剩余的字符串的出现次数当值?

Robinz 发表于 2020-3-13 09:53:48

你创建TreeMap之后,TreeMap实际是一个空的键值对,里面没有任何的东西。当你想用任何键去查找的时候,返回的应该都是null。就好比字符串"wew"在这段程序里跑,for循环遍历到第一个字符'w'时,实际上map还是空的,直接返回null,然后经过判断语句将<'w',1>插入到这个键值对中,‘e’字母也是同理,只不过遍历到‘e’字母时,map中已经有了‘w’这个键。后面再遍历到‘w’,就更新键值对。希望我的理解能帮到你。

邑本正今 发表于 2020-3-13 15:42:56

Robinz 发表于 2020-3-13 09:53
你创建TreeMap之后,TreeMap实际是一个空的键值对,里面没有任何的东西。当你想用任何键去查找的时候,返回 ...

谢谢你的热心答复!讲得很清楚,我懂了,谢谢指教!
页: [1]
查看完整版本: 萌新求助 统计字符串字母出现次数