集合

集合

画板

  1. set的带有hash的都是由对应的map来实现的
    1. hashSet -> hashMap
    2. linkedHashSet -> linkedHashMap

通用集合考虑方向

  1. 该容器的特点,实现了什么接口
  2. 线程安全
  3. 效率
  4. 底层数据结构
  5. 扩容机制
  6. 如果是同一个类型的容器,考虑一下各自的实现算法,

一个可重复,自排序的容器

谷歌的multiSet接口

常用于统计某个东西出现的此处,底层依赖于hashmap实现

// 需要引入 Guava 库
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;

// ...
List<String> words = Arrays.asList("apple", "banana", "apple", "orange", "banana", "apple");
Multiset<String> wordBag = HashMultiset.create();

wordBag.addAll(words); // 直接把所有单词扔进“袋子”

System.out.println(wordBag); // 输出: [orange, banana x 2, apple x 3]
  1. 实现hashMultiSet,multiset的实现类,无需

比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同

  1. 线程不同步,都是线程不安全的
  2. 数据结构
    1. hashSet
      1. 基于hashMap,里面是无序的,唯一的
    2. LinkedHashSet
      1. 基于LinkedHashMap,唯一,但是会按照FIFO进行数据的存储和取出
    3. TreeSet
      1. 基于红黑树,会按照自然顺序或者自定义排序进行自动排序
  3. 使用场景
    1. 唯一无序,hashSet
    2. FIFO,LinkedHashSet
    3. 自排序,大量插入删除,TreeSet

更新: 2025-08-29 13:56:05
原文: https://www.yuque.com/duifangzhengzaishuru-rqbua/axyc58/kk45l754m17e89rg