Map集合练习

Map集合练习

需求:

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

分析:

  1. 获取一个字符串对象

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

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

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

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

  6. 打印最终结果

遍历字符串的两种方式1.toCharArray  2.length()+charAt(索引)

 

练习:
        计算一个字符串中每个字符出现次数

    分析:
        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集合,输出结果

 

遍历字符串(转为字符串数组),Map集合中如果有某字符,则字符加1,没有则置1。

package com.itheima.demo03.Map;

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

public class Demo03MapTest {
    public static void main(String[] args) {
        //1.使用Scanner获取用户输入的字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str = sc.next();
        //2.创建Map集合,key是字符串中的字符,value是字符的个数
        HashMap<Character,Integer> map = new HashMap<>();
        //3.遍历字符串,获取每一个字符
        for(char c :str.toCharArray()){              
            //4.使用获取到的字符,去Map集合判断key是否存在
            if(map.containsKey(c)){
                //key存在
                Integer value = map.get(c);
                value++;
                map.put(c,value);  // 存在则数量加1
            }else{
                //key不存在
                map.put(c,1);     // 一开始不存在则数量设为1
            }
        }
        //5.遍历Map集合,输出结果
        for(Character key :map.keySet()){
            Integer value = map.get(key);
            System.out.println(key+"="+value);
        }
    }
}

执行结果:

请输入一个字符串:
dsgrhrtht
r=2
s=1
d=1
t=2
g=1
h=2

Process finished with exit code 0

JDK9对集合添加的优化

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

public class Demo01 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("abc");
        list.add("def");
        list.add("ghi");
        System.out.println(list);
    }
}

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

JDK9的新特性:
    List接口,Set接口,Map接口:里边增加了一个静态的方法of,可以给集合一次性添加多个元素
    static <E> List<E> of​(E... elements)
    使用前提:
        当集合中存储的元素的个数已经确定了,不在改变时使用
 注意:
    1.of方法只适用于List接口,Set接口,Map接口,不适用接接口的实现类
    2.of方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常
    3.Set接口和Map接口在调用of方法的时候,不能有重复的元素,否则会抛出异常

写完不能再改变长度了(添加、删除)

package com.itheima.demo04.JDK9;

import java.util.List;
import java.util.Map;
import java.util.Set;
public class Demo01JDK9 {
    public static void main(String[] args) {
        List<String> list = List.of("a", "b", "a", "c", "d");
        System.out.println(list);//[a, b, a, c, d]
        //list.add("w");//UnsupportedOperationException:不支持操作异常

        //Set<String> set = Set.of("a", "b", "a", "c", "d");//IllegalArgumentException:非法参数异常,有重复的元素
        Set<String> set = Set.of("a", "b", "c", "d");
        System.out.println(set);
        //set.add("w");//UnsupportedOperationException:不支持操作异常

        //Map<String, Integer> map = Map.of("张三", 18, "李四", 19, "王五", 20,"张三",19);IllegalArgumentException:非法参数异常,有重复的元素
        Map<String, Integer> map = Map.of("张三", 18, "李四", 19, "王五", 20);
        System.out.println(map);//{王五=20, 李四=19, 张三=18}
        //map.put("赵四",30);//UnsupportedOperationException:不支持操作异常
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我知道了。这是一个Java练习题,涉及Map集合、遍历车站编号及名称以及计算地铁票价。 首先,我们需要创建一个Map对象,用于存储车站编号和名称的对应关系。代码如下: ```java Map<Integer, String> stationMap = new HashMap<>(); stationMap.put(1, "车公庙"); stationMap.put(2, "中心区"); stationMap.put(3, "华强北"); stationMap.put(4, "福田口岸"); stationMap.put(5, "市民中心"); // ... 其他车站编号和名称 ``` 然后,我们可以使用for循环遍历Map集合,输出车站编号和名称。代码如下: ```java for (Map.Entry<Integer, String> entry : stationMap.entrySet()) { System.out.println("车站编号:" + entry.getKey() + ",车站名称:" + entry.getValue()); } ``` 接下来,我们需要根据起点站和终点站计算地铁票价。假设票价按照距离计算,每站之间的票价为2元。可以定义一个方法来实现这个功能。代码如下: ```java public static double calculateFare(int startStation, int endStation) { int distance = Math.abs(startStation - endStation); double fare = distance * 2; return fare; } ``` 最后,我们可以在主函数中调用这个方法来计算地铁票价。代码如下: ```java int startStation = 1; int endStation = 5; double fare = calculateFare(startStation, endStation); System.out.println("起点站:" + stationMap.get(startStation) + ",终点站:" + stationMap.get(endStation) + ",票价:" + fare + "元"); ``` 这样,我们就完成了这个练习题。完整代码如下: ```java import java.util.HashMap; import java.util.Map; public class SubwayFare { public static void main(String[] args) { Map<Integer, String> stationMap = new HashMap<>(); stationMap.put(1, "车公庙"); stationMap.put(2, "中心区"); stationMap.put(3, "华强北"); stationMap.put(4, "福田口岸"); stationMap.put(5, "市民中心"); // ... 其他车站编号和名称 for (Map.Entry<Integer, String> entry : stationMap.entrySet()) { System.out.println("车站编号:" + entry.getKey() + ",车站名称:" + entry.getValue()); } int startStation = 1; int endStation = 5; double fare = calculateFare(startStation, endStation); System.out.println("起点站:" + stationMap.get(startStation) + ",终点站:" + stationMap.get(endStation) + ",票价:" + fare + "元"); } public static double calculateFare(int startStation, int endStation) { int distance = Math.abs(startStation - endStation); double fare = distance * 2; return fare; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值