Java开发学习day07-集合-Map&Stream&递归

关于作业第4道编程题的一些总结:

在Java中,HashMap 本身不保证元素的顺序。这意味着当你向 HashMap 中插入键值对时,它们在内存中的存储顺序可能会在不同的运行中或者在同一个运行的不同时间点发生变化。

然而,从Java 8开始,HashMap 的实现在内部使用链表和红黑树来维护条目的顺序,使得在大多数情况下,HashMap 会按照插入顺序来遍历条目。但是,这种顺序的保证并不是 HashMap 规范的一部分,因此不应该依赖于它。

如果你需要一个保证顺序的 Map 实现,你应该使用 LinkedHashMapLinkedHashMap 维护了元素的插入顺序,或者在构造时指定的顺序(例如访问顺序)。这意味着当你遍历 LinkedHashMap 时,元素将会按照它们被插入的顺序(或者访问的顺序,如果你在构造时指定了访问顺序)来返回。

所以此处应选择LinkedHashMap。

同时,在下列代码中:

    public static void main(String[] args) {
        //1、创建一个HashMap,键为商品类型,值是不同的品牌
        Map<String, Set<String>> products = new LinkedHashMap<>();

        // 添加电脑品牌,为了保证是按插入数据的顺序输出,所以应该使用LinkedHashSet,
        // 同时Set.of()方法添加时并不会保证顺序,故此处应采用Arrays.asList来初始化LinkedHashSet
        //products.put("电脑", new LinkedHashSet<>(Set.of("华为电脑", "苹果电脑", "oppo电脑", "vivo电脑", "三星电脑")));
        products.put("电脑", new LinkedHashSet<>(Arrays.asList("华为电脑", "苹果电脑", "oppo电脑", "vivo电脑", "三星电脑")));

        // 添加手机品牌
        products.put("手机", new LinkedHashSet<>(Arrays.asList("华为手机", "苹果手机", "oppo手机", "vivo手机", "三星手机")));

        // 添加耳机品牌
        products.put("耳机", new LinkedHashSet<>(Arrays.asList("华为耳机", "苹果耳机", "华强北耳机", "oppo耳机", "vivo耳机", "三星耳机")));

        //2、遍历HashMap并打印
        products.forEach((type, brands) ->
        {
            System.out.print(type + "=[");
            //这一步用来实现当打印集合中的最后一个元素后,不加逗号
            Iterator<String> it = brands.iterator();
            // 遍历集合
            while (it.hasNext()) {
                String brand = it.next();
                System.out.print(brand);
                if (it.hasNext()) {
                    System.out.print(",");
                }
            }
            System.out.println("]");
        });
    }

可看到,关于HashSet的初始化,尽管LinkedHashSet是按顺序插入,但是Set.of()方法添加时并不会保证顺序,故此处应采用Arrays.asList来初始化LinkedHashSet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值