3-3-Set

文章目录
  1. 1. Set
    1. 1.1. hashset(基于hashmap)
      1. 1.1.1. 1.无序,值不重复
      2. 1.1.2. 2.hashcode值
      3. 1.1.3. 3.想让两个不同对象相等,必须覆盖hashcode和equals方法
    2. 1.2. treeset(基于treemap)二叉树
      1. 1.2.1. 1.使用二叉树原理对新增对象排序,插入二叉树
      2. 1.2.2. 2.Integer,string默认排序。自定义对象必须实现comparable接口,覆写compareTo函数
      3. 1.2.3. 3.覆写compareTo要返回对应值才能排序
    3. 1.3. LinkedHashSet(基于linkedhashmap实现的同hashset操作)
      1. 1.3.1. 1.linkedhashmap实现,增删效率快
      2. 1.3.2. 2.继承于hashset,操作一样
    4. 1.4. 线程安全
      1. 1.4.1. 1.CopyOnWriteArraySet
      2. 1.4.2. 2.使用Guava构建ConcurrentHashSet
      3. 1.4.3. 3.Collections.synchronizedSet
      4. 1.4.4. 4.ConcurrentSkipListSet(jdk6)

Set

hashset(基于hashmap)

1.无序,值不重复

2.hashcode值

3.想让两个不同对象相等,必须覆盖hashcode和equals方法

如果hash一样,equals为false。那就是哈希值下顺延,放同一个哈希桶,但桶里是个链表。

treeset(基于treemap)二叉树

1.使用二叉树原理对新增对象排序,插入二叉树

2.Integer,string默认排序。自定义对象必须实现comparable接口,覆写compareTo函数

3.覆写compareTo要返回对应值才能排序

LinkedHashSet(基于linkedhashmap实现的同hashset操作)

1.linkedhashmap实现,增删效率快

2.继承于hashset,操作一样

线程安全

1.CopyOnWriteArraySet

底层采用了CopyOnWriteArrayList数据结构来实现。在add元素时,采用的是可重入锁来实现线程安全。

2.使用Guava构建ConcurrentHashSet

3.Collections.synchronizedSet

4.ConcurrentSkipListSet(jdk6)