【Java】基础练习(十二)

1.Map基本操作

创建一个Map集合,完成以下操作:

  • 将我国省份和其简称存到 Map 集合中;
  • 将省份名称中包含"江"的省份从集合中删除;
  • 遍历输出集合元素

(1)源码:

package swp.kaifamiao.codes.Java.d0906;
// 将我国省份和其简称存到 Map 集合中
// 将省份名称中包含"江"的省份从集合中删除
// 遍历输出集合元素
import java.util.HashMap;
import java.util.Map;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Text01 {
    public static void main(String[] args) {
        // 创建一个 Map 集合
        Map<String, String> provinceMap = new HashMap<>(40);
        // 向 Map 中添加省份和简称
        provinceMap.put("北京", "京");
        provinceMap.put("上海", "沪");
        provinceMap.put("天津", "津");
        provinceMap.put("重庆", "渝");
        provinceMap.put("河北", "冀");
        provinceMap.put("山西", "晋");
        provinceMap.put("辽宁", "辽");
        provinceMap.put("吉林", "吉");
        provinceMap.put("黑龙江", "黑");
        provinceMap.put("江苏", "苏");
        provinceMap.put("浙江", "浙");
        provinceMap.put("安徽", "皖");
        provinceMap.put("福建", "闽");
        provinceMap.put("江西", "赣");
        provinceMap.put("山东", "鲁");
        provinceMap.put("河南", "豫");
        provinceMap.put("湖北", "鄂");
        provinceMap.put("湖南", "湘");
        provinceMap.put("广东", "粤");
        provinceMap.put("海南", "琼");
        provinceMap.put("四川", "川");
        provinceMap.put("贵州", "黔");
        provinceMap.put("云南", "滇");
        provinceMap.put("陕西", "陕");
        provinceMap.put("甘肃", "甘");
        provinceMap.put("青海", "青");
        provinceMap.put("台湾", "台");
        provinceMap.put("内蒙古", "蒙");
        provinceMap.put("广西", "桂");
        provinceMap.put("西藏", "藏");
        provinceMap.put("宁夏", "宁");
        provinceMap.put("新疆", "新");
        provinceMap.put("香港", "港");
        provinceMap.put("澳门", "澳");

        // 将省份名称中包含"江"的省份从集合中删除
        for (String province : new HashMap<>(provinceMap).keySet()) {
            if (province.contains("江")) {
                provinceMap.remove(province);
            }
        }

        // 遍历输出集合元素
        for (Map.Entry<String, String> entry : provinceMap.entrySet()) {
            System.out.println(entry.getKey() + " 的简称是:" + entry.getValue());
        }
    }
}

(2)运行效果:

在这里插入图片描述
在这里插入图片描述


2.统计数量

输入一个字符串,统计字符串中每个字符出现的次数并输出

(1)源码:

package swp.kaifamiao.codes.Java.d0906;
// 输入一个字符串,统计字符串中每个字符出现的次数并输出

import java.util.HashMap;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Text02 {
    public static void main(String[] args) {
        String str = "Hello, world!";
        HashMap<Character, Integer> map = new HashMap<>();

        // 迭代字符串中的每个字符
        for(int i=0; i<str.length(); i++) {
            char ch = str.charAt(i);
                // 如果字符已存在于 map 中,则将其对应的 value 值加 1
                if(map.containsKey(ch)) {
                    map.put(ch, map.get(ch) + 1);
                } else {
                    // 如果字符不存在于 map 中,则添加进去,并将其对应的 value 值置为 1
                    map.put(ch, 1);
                }
        }

        // 输出结果
        for(Character key : map.keySet()) {
            int count = map.get(key);
            System.out.println(key + ": " + count);
        }
    }
}

(2)运行效果:

在这里插入图片描述


3.摩尔斯密码

国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如:

‘a’ 对应 “.-” ,
‘b’ 对应 “-…” ,
‘c’ 对应 “-.-.” ,以此类推。
为了方便,所有 26 个英文字母的摩尔斯密码表如下:

[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]

给你一个字符串数组 words ,每个单词可以写成每个字母对应摩尔斯密码的组合。

例如,“cab” 可以写成 “-.-…–…” ,(即 “-.-.” + “.-” + “-…” 字符串的结合)。我们将这样一个连接过程称作 单词翻译 。对 words 中所有单词进行单词翻译,返回不同 单词翻译的数量。

示例1:

输入: words = ["gin", "zen", "gig", "msg"]
输出: 2
解释: 
各单词翻译如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."

共有 2 种不同翻译, "--...-.""--...--."
示例2:

输入:words = ["a"]
输出:1

(1)源码:

package swp.kaifamiao.codes.Java.d0906;

import java.util.HashMap;

/**
 * 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串,比如:
 * 'a' 对应 ".-",
 * 'b' 对应 "-...",
 * 'c' 对应 "-.-.",以此类推。
 *
 * 给你一个字符串数组 words,每个单词可以写成每个字母对应摩尔斯密码的组合。
 * 例如,"cab" 可以写成 "-.-..--...",(即 "-.-." + ".-" + "-..." 字符串的结合)。
 * 我们将这样一个连接过程称作单词翻译。
 * 对 words 中所有单词进行单词翻译,返回不同单词翻译的数量。
 *
 * @author SWP
 * @version 1.0.0
 */
public class Text03 {
    public static void main(String[] args) {
        String[] strings = {"gin", "zen", "gig", "msg"};
        System.out.println(translation(strings));
    }

    /**
     * 将字符串数组中的元素进行翻译,并统计不同翻译结果的数量
     *
     * @param strs 字符串数组
     * @return 不同翻译结果的数量
     */
    private static int translation(String[] strs) {
        // 定义摩尔斯密码表
        String[] codes = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};

        // 使用 HashMap 存储翻译结果及其出现次数
        HashMap<String, Integer> map = new HashMap<>();

        // 遍历每个单词
        for (String word : strs) {
            String translation = "";

            // 将每个字母翻译成摩尔斯密码,并将翻译结果拼接起来
            for (char c : word.toCharArray()) {
                int index = c - 'a';
                translation += codes[index];
            }

            // 将完整的单词翻译添加到 HashMap 中,并记录出现次数
            map.put(translation, map.getOrDefault(translation, 0) + 1);
        }

        // 返回不同翻译结果的数量
        return map.size();
    }
}

(2)运行效果:

在这里插入图片描述


4.以下代码输出的结果是什么?为什么?

public static void main(String[] args) {
    Map<Short, String> map = new HashMap<>();
    for (short i = 0; i < 100; i ++){
        map.put(i, String.valueOf(i));
        map.remove(i - 1);
    }
    System.out.println(map.size());
}

在这里插入图片描述

解析:

       由于 i 是 short 类型,在进行减法操作 i - 1 时,会先将 i 转换为 int 类型再进行减法运算。但由于 map 泛型中定义的key的类型为 Short,所以每次删除都没有成功。
       若想要避免这种情况,可以将i - 1的结果强制转换成Short类型,例如:

package swp.kaifamiao.codes.Java.d0906;

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

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Text04 {
    public static void main(String[] args) {
        Map<Short, String> map = new HashMap<>();
        for (short i = 0; i < 100; i ++){
            map.put(i, String.valueOf(i));
            map.remove((short)(i - 1));
        }
        System.out.println(map.size());
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值