Java集合02——三分钟了解你必须掌握的两个Set

上一篇文章我们说到了 List ,本章开始,我们将继续讲解Set相关的知识。关注公众号「Java面典」了解更多 Java 知识点。

Set 是一个无重复对象的集合类。值的重复与否是根据对象的 hashCode 来判断的,如果想要让两个不同的对象视为相等的,就必须覆盖 Object 的 hashCode 方法和 equals 方法。

HashSet

  • HashSet 是无序 的 Set 对象,由 HashMap 实现的,不保证元素的顺序性
  • HashSet 是非同步的。如果需要使用多线程操作 HashSet ,可以使用Collections.synchronizedSet 方法来“包装” Set。
Set s = Collections.synchronizedSet(new HashSet(...));
  • 带集合构造参数 。
public HashSet(Collection<? extends E> c) {
    // (int) (c.size()/.75f) + 1 —— HashMap 的加载因子是 0.75
    // -- 当HashMap的“阈值”(阈值=HashMap总的大小*加载因子) < “HashMap实际大小”时,
    // -- HashMap 容量要翻番。
    // 16 —— HashMap的总的大小,必须是2的指数倍
    map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
    addAll(c);
}

TreeSet

  • TreeSet 是有序的 Set 对象,通过 TreeMap 实现的,利用二叉树的原理,保证集合内的顺序;
  • String 和 Integer 都可以进行默认的 TreeSet 排序,自定义对象必须实现 Comparable 接口,并且覆写相应的 compareTo()函数,才能进行 TreeSet 排序;
  • TreeSet 是非同步的;
  • TreeSet 为基本操作(add、remove 和 contains)提供受保证的 log(n) 时间开销。

Java集合系列推荐

Java集合01——List 的几个实现类,了解一下?

posted @ 2020-03-12 14:29  xwayway  阅读(388)  评论(0编辑  收藏  举报