集合(24):Map集合案例

集合(24):Map集合案例

/*
    "aababcabcdabcde",获取键盘录入字符串中每一个字母出现的次数
    要求结果:a(5)b(4)c(3)d(2)e(1)

    1、键盘录入一个字符串
    2、使用TreeMap集合对象
        键:Character
        值:Integer
    3、将字符串转换从字符数组
    4、遍历字符数组获取每一个字符
    5、拿着获取到的字符去集合中键去找,看看有没有这个键
        如果没有,就把这个字符当作key,value值为1进行存储
        如果有,就把该字符对应的值+1,重新存储到集合中
    6、定义一个StringBuffer作为拼接
    7、遍历集合,得到键和值,按照指定的输出对进行拼接a(5)b(4)c(3)d(2)e(1)
    8、将StringBuffer转换成字符串输出

 */

import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class MapTest1 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个纯英语的字符串:");
        String s = sc.next();

        //创建TreeMap集合对象
        TreeMap<Character, Integer> map = new TreeMap<>();

        //将字符串转换从字符数组
        char[] chars = s.toCharArray();

        //遍历字符数组获取每一个字符
        for (char c : chars) {
            //拿着获取到的字符去集合中键去找,看看有没有这个键
            Integer value = map.get(c);

            if (value == null) {
                map.put(c, 1);
            } else {
                value++;
                map.put(c, value);
            }
        }

        //定义一个StringBuffer作为拼接
        StringBuffer sb = new StringBuffer();

        //遍历集合得到每一个键和值
        Set<Map.Entry<Character, Integer>> entries = map.entrySet();
        for (Map.Entry<Character, Integer> entry : entries) {
            Character key = entry.getKey();
            Integer value = entry.getValue();
            sb.append(key).append("(").append(value).append(")");
        }
        
        //将StringBuffer转换成字符串输出
        String string = sb.toString();
        System.out.println("计算每个字符的个数为:" + string);
    }
}

面试题

1、HashMap与Hashtable的区别
    (1)HashMap中的key和value允许为null值,而Hashtable不允许
    (2)Hashtable是线程安全的,HashMap是线程不安全的
2、Map(接口)元素是由key和value键值对组成,key是唯一的,value是可以重复的
    --HashMap
        当引用数据类型作为key的时候,该类型必须重写hashCode()和equals()方法,保证唯一
        --LinkedHashMap
            哈希表保证唯一(键唯一)
            链表保证有序(存储和取出顺序一致)
    --TreeMap
        当引用数据类型作为key的时候,有两种排序方式
            自然排序
            比较器排序(推荐)

上一篇:ConcurrentSkipListMap/Set 基于跳表的Map和Set


下一篇:剑指 Offer 60. n个骰子的点数