Java Map 接口全攻略

Map(双列集合的根接口)

特点: 以键值对形式保存数据 健保持唯一 key – value
其中有两个实现类 分别为 HashSet 和 HasehMap 它们两个底层都是一套算法实现
其中Set 底层是依赖 Map 来实现的 添加到HashSet 中的值 实际上是添加到 HasehMap 中健的位置

代码示例:

HashMap<String, Integer> map = new HashMap<>();
        map.put("振北", 19);
        map.put("振东", 18);
        map.put("振西", 16);
        map.put("振南", 16);
        // 是否包含Key
        // 是否包含Value
        boolean containsKey = map.containsKey("振南");
        boolean containsValue = map.containsValue(16);
        // 通过Key找Value
        Integer integer = map.get("振北");
        Integer integer1 = map.get("振中");
        // 获取所有Key的Set集合
        Set<String> keySet = map.keySet();
        // 获取所有Value的集合
        Collection<Integer> values = map.values();
        //System.out.println(values);
        // 通过key删除整个 键值对
        Integer remove = map.remove("振中");
        //System.out.println(remove);
        // 情况map
        map.clear();
        System.out.println(keySet);
        System.out.println(integer1);
        System.out.println(integer);
        System.out.println(containsValue);
        System.out.println(containsKey);
        System.out.println(map);

如何遍历map集合?

HashMap<String, Integer> map = new HashMap<>();
            map.put("振北", 19);
            map.put("振东", 18);
            map.put("振西", 17);
            map.put("振南", 16);
        // 通过keySet遍历
            Set<String> keySet = map.keySet();
            // 第一种使用 获取迭代器
            Iterator<String> iterator = keySet.iterator();
            while (iterator.hasNext()) {
                String next = iterator.next();
                Integer integer = map.get(next);
                System.out.println(next + " " +integer);
            }
            // 第二种使用增强For循环遍历
            Set<String> keySet = map.keySet();
        for (String string : keySet) {
            Integer integer = map.get(string);
            System.out.println(string + " " + integer);

        }

例题:

键盘输入字符串 统计字符串中每个字符出现的次数

Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine();
        char[] charArray = string.toCharArray();
        HashMap<Character, Integer> map = new HashMap<>();
        Set<Entry<Character, Integer>> entrySet = map.entrySet();
        for (int i = 0; i < charArray.length; i++) {
            // 将每一个字符存在map中
            // 如果不存在

            if (!map.containsKey(charArray[i])) {
                map.put(charArray[i], 1);
            }else {     // 如果存在
                Integer integer = map.get(charArray[i]);
                integer = integer + 1;
                map.put(charArray[i], integer); 
            }
        }System.out.println(map);

LinkedHashMap

线程不安全 有序(怎么存怎么取)

添加方法示例:

LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
        map.put("james", 19);
        map.put("Tom", 18);
        map.put("Jerry", 17);
        map.put("Mike", 20);
        System.out.println(map);

Collection 类中的方法

代码示例:

ArrayList<Integer> list = new ArrayList<>();
        list.add(12);
        list.add(11);
        list.add(13);
        list.add(15);
        // 随机交换集合中的位置(洗牌)
        //Collections.shuffle(list);
        // 排序
    //  Collections.sort(list);
        //二分查找
        //int binarySearch = Collections.binarySearch(list, 13);
        //System.out.println(binarySearch); 
        Collections.reverse(list);      
        System.out.println(list);

使用map 来模拟斗地主(洗牌 发牌 看牌)

public class Demo04 {
    public static void main(String[] args) {
        TreeMap<Integer, String> map = new TreeMap<>();
        //保存索引
        ArrayList<Integer> list = new ArrayList<>();
        // 创建索引
        int index = 0;

        String[] s1 = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        String[] s2 = {"红桃","黑桃","梅花","方块"};
        for (int i = 0; i < s1.length; i++) {
            for (int j = 0; j < s2.length; j++) {
                String pokerString  = s2[j] + s1[i];
                map.put(index, pokerString);
                index++;
                list.add(index);
            }
        }
        map.put(index, "小王");
        map.put(++index, "大王");
        list.add(index);
        //System.out.println(list);
        Collections.shuffle(list);

        TreeSet<Integer> james = new TreeSet<>();
        TreeSet<Integer> Tom = new TreeSet<>();
        TreeSet<Integer> Jerry = new TreeSet<>();
        TreeSet<Integer> set3 = new TreeSet<>();

        for (int i = 0; i < list.size(); i++) {
            Integer integer = list.get(i);
            if (i >= list.size() -3) {
                set3.add(integer);
                System.out.println();
            }else if (i % 3 ==0) {
                // 给第一个人发牌
                james.add(integer);
            } else if (i % 3 == 1) {
                Tom.add(integer);
            }else if (i % 3 ==2) {
                Jerry.add(integer);
            }
        }


        watchPokers(map, james);
        watchPokers(map, Tom);
        watchPokers(map, Jerry);
        watchPokers(map, set3);

    }

    public static void watchPokers(TreeMap<Integer, String> map,TreeSet<Integer> set) {

        // 遍历索引的set 取出每一个索引 再去map中找对应的牌
        for (Integer integer : set) {
            String string = map.get(integer);
            System.out.print(string + " ");
        }
        System.out.println();

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值