1. 程式人生 > 實用技巧 >5. 集合不安全

5. 集合不安全

List 不安全

List<String> list = new ArrayList<>();

        List<String> list2 = Collections.synchronizedList(new ArrayList<>());

        // CopyOnWrite 寫入時複製;
        /**
         * CopyOnWriteArrayList 比 Vetor 厲害在:
         * CopyOnWriteArrayList 用的 Lock 鎖, Vetor 使用的是 synchronized 鎖,synchronized 鎖效能沒有Lock好
         *
         *
         * 多個執行緒呼叫的時候,list ,讀取的時候,固定的,寫入
         * 在寫入的時候避免覆蓋,造成資料問題。
         * 讀寫分離
         */
        List<String> list3 = new CopyOnWriteArrayList<>();

        for (int i = 1; i <=100 ; i++) {
            new Thread(()->{
                list3.add("1");
                System.out.println(list3);
            }, String.valueOf(i)).start();
        }

Set

        Set<String> set = new HashSet<>();

        Set<String> set2 = Collections.synchronizedSet(new HashSet<>());

        Set<String> set3 = new CopyOnWriteArraySet<>();

HashSet 的底層

    public HashSet() {
        map = new HashMap<>();
    }

    // set 的本質就是 map 的key,因為key是無法重複的
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

Map 不安全

    Map<String, Object> map = new HashMap<>();

    // 1.map 是這樣用的嗎
    /**
     * 工作中不用 HashMap
     */

    // 2.預設等價於什麼?
    /**
     * Map<String, Object> map = new HashMap<>();
     * ===  Map<String, Object> map = new HashMap<>(16, 0.75);
     */

    /**
     * 載入因子和初始化容量
     */
    Map<String, Object> map1 = new ConcurrentHashMap<>();