计算一个字符串中每个字符出现次数与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:返回的集合是不可变的;