计算一个字符串中每个字符出现次数与JDK9对集合添加的优化_of方法

需求︰
计算一个字符串中每个字符出现次数。

分析:
1.获取一个字符串对象

2.创建一个Map集合,键代表字符,值代表次数。

3.遍历字符串得到每个字符。

4.判断Map中是否有该键。

5.如果没有,第一次出现,存储次数为1;如果有,则说明已经出现过,获取到对应的值进行++,再次存储。

6.打印最终结果

 

package Demo_Map;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/*
    1.问题:
        计算一个字符串中每个字符出现的次数
      分析:
        1.使用Scanner获取用户输入的字符串
        2.创建Map集合,key是字符串中的字符,value是字符的个数
        3.遍历字符串,获取每一个字符
        4.使用获取到的字符,去Map集合判断key是否存在
            key存在:
                通过字符(key)获取value(字符个数)
                value++
                put(key,value)把新的value存储到Map集合中
             key不存在:
                put(key,1)
         5.遍历Map集合,输出结果
 */
public class TestDemo01 {
    public static void main(String[] args) {
        //获取用户输入的字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String s = sc.next();
        //2.创建Map集合 key是字符串中的字符,value是字符的个数
        Map<Character, Integer> map = new HashMap<>();
        //3.遍历字符串,获取每一个字符
        for (char a : s.toCharArray()) {
            //4.使用获取到的字符去Map集合判断key是否存在
            if (map.containsKey(a)) {
                //key存在
                Integer value = map.get(a);
                value++;
                map.put(a, value);
            } else {
                //key不存在
                map.put(a, 1);
            }
        }
        //5.遍历Map集合,输出结果
        for (Character Key : map.keySet()) {
            Integer value = map.get(Key).intValue();
            System.out.println(Key + "=" + value);
        }
    }
}

补充知识点

JDK9对集合添加的优化

通常,我们在代码中创建一个集合(例如,List或Set ),并直接用一些元素填充它。实例化集合,几个add方法调用,使得代码重复。

 

Java 9,添加了几种集合工厂方法,更方便创建少量元素的集合、map实例。新的List、Set、Map的静态工厂方法可以更方便地创建集合的不可变实例。

JDK9的新特性:

List接口,Set接口,Map接口:增加了一个静态的方法of,可以给集合一次性添加多个元素

使用前提:当集合中储存的元素的个数已经确定,不在改变时使用

注意:

1、of方法只适用于list接口,Set接口,Map接口,不适用于接口的实现类

2、of方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常

3、Set接口和Map接口在调用of方法的时候,不能有重复的元素,否则会抛出异常

 

public class HelloJDK9 {  
    public static void main(String[] args) {  
        Set<String> str1=Set.of("a","b","c");  
        //str1.add("c");这里编译的时候不会错,但是执行的时候会报错,因为是不可变的集合  
        System.out.println(str1);  
        Map<String,Integer> str2=Map.of("a",1,"b",2);  
        System.out.println(str2);  
        List<String> str3=List.of("a","b");  
        System.out.println(str3);  
    }  
} 

 

 

1:of()方法只是Map,List,Set这三个接口的静态方法,其父类接口和子类实现并没有这类方法,比如 HashSet,ArrayList等待;
2:返回的集合是不可变的;

 

  

posted @ 2022-07-07 09:46  zj勇敢飞,xx永相随  阅读(28)  评论(0编辑  收藏  举报