集合类不安全之Map

public class ContainNotSafeDemo {
    public static void main(String[] args) {
        /**
         * 1.故障现象
         *      java.util.ConcurrentModificationException
         * 2.导致原因
         * 3.解决方案
         *  3.1 new HashMap<>();
         *  3.2 new ConcurrentHashMap<>();
         *  3.3 Collections.synchronizedMap(new ConcurrentHashMap<>());
         */
        Map<String,String> map =  Collections.synchronizedMap(new ConcurrentHashMap<>());
        for (int i = 0; i < 30; i++) {
            new Thread(() -> {
                map.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,8));
                System.out.println(map);
            }, String.valueOf(i)).start();
        }

    }
}
### Java 中 `Map` 集合类概述 在 Java 编程语言中,`Map` 接口代表了一种键值对映射的数据结构。每个键最多只能映射到一个值,并且允许有重复的键[^1]。 常见的实现类包括: - **HashMap**: 提供基于哈希表的 Map 实现;保证顺序。 - **LinkedHashMap**: 继承自 HashMap, 通过链表维护插入顺序。 - **TreeMap**: 基于红黑树实现,按键自然排序或指定比较器排序。 - **Hashtable**: 类似于 HashMap, 但是线程安全,在大多数情况下性能较低。 #### 创建并初始化 Map 对象 ```java // 使用 HashMap 初始化 map Map<String, Integer> hashMap = new HashMap<>(); hashMap.put("one", 1); hashMap.put("two", 2); // LinkedHashMap 保持插入顺序 Map<String, String> linkedHashMap = new LinkedHashMap<>(); linkedHashMap.put("first", "valueOne"); linkedHashMap.put("second", "valueTwo"); // TreeMap 自动按 key 的自然序排列 Map<Integer, String> treeMap = new TreeMap<>(); treeMap.put(3, "three"); treeMap.put(1, "one"); ``` #### 访问和操作 Map 数据 可以使用多种方法来访问存储在 `Map` 中的数据项以及执行其他常用的操作: - 删除条目:`remove(Object key)` ```java System.out.println(hashMap.get("one")); // 输出:1 if (hashMap.containsKey("two")) { System.out.println("存在键 two"); } hashMap.remove("one"); ``` #### 迭代遍历 Map 迭代整个 `Map` 可以采用同的方式,这里展示两种常见的方式——一种是利用 entrySet() 方法获取 Entry 集合进行迭代,另一种则是直接遍历 keys 或 values. ```java for (Map.Entry<String, Integer> entry : hashMap.entrySet()) { System.out.println(entry.getKey() + "=" + entry.getValue()); } for (String key : hashMap.keySet()) { System.out.print(key + ", "); } System.out.println(); for (Integer value : hashMap.values()) { System.out.print(value + ", "); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值