JAVA-容器 HashSet

HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。

HashSet 底层声明了一个 HashMapHashSet 做了一层包装,操作 HashSet 里的元素时其实是在操作 HashMap 里的元素。TreeSet底层也是声明了一个 TreeMap,操作 TreeSet 里的元素其实是操作 TreeMap 里的元素。

HashSet 允许有 null 值。

HashSet 是无序的,即不会记录插入的顺序。

HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。




//E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。

Set<E> sites = new HashSet<E>();

Serializable接口:

        ArrayList实现了java.io.Serializable接口,该接口主要是在序列化的时候起作用。

Cloneable接口:

        它允许在堆中克隆出一块和原对象一样的对象,并将这个对象的地址赋予新的引用,这样显然我对新引用的操作,不会影响到原对象。

        此类实现了Cloneable接口,以指示Object的clone()方法可以合法地对该类实例进行按字段复制。Object的clone()方法,提供的是一种浅克隆的机制,如果想要实现对对象的深克隆,可以引入第三方jar包等方式。


优势:

假如我们现在想要在一大堆数据中查找X数据。LinkedList的数据结构就不说了,查找效率低的可怕。ArrayList哪,如果我们不知道X的位置序号,还是一样要全部遍历一次直到查到结果,效率一样可怕。HashSet天生就是为了提高查找效率的。

散列码是由对象导出的一个整数值。在Object中有一个hashCode方法来得到散列码。基本上,每一个对象都有一个默认的散列码,其值就是对象的内存地址。但也有一些对象的散列码不同,比如String对象,它的散列码是对内容的计算结果。


JDK
Modifier and TypeMethod and Description
booleanadd(E e)

将指定的元素添加到此集合(如果尚未存在)。

voidclear()

从此集合中删除所有元素。

Objectclone()

返回此 HashSet实例的浅层副本:元素本身不被克隆。

booleancontains(Object o)

如果此集合包含指定的元素,则返回 true 。

booleanisEmpty()

如果此集合不包含元素,则返回 true 。

Iterator<E>iterator()

返回此集合中元素的迭代器。

booleanremove(Object o)

如果存在,则从该集合中删除指定的元素。

intsize()

返回此集合中的元素数(其基数)。

Spliterator<E>spliterator()

在此集合中的元素上创建late-binding故障快速 Spliterator

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
container Collection 标记: 顶级接口 List 标记: interface ArrayList 标记: class CRUD : boolean add​(E e) boolean remove​(Object o) E set​(int index, E element) E get​(int index) 底层数组实现,查询快,增删慢 LinkedList 标记: class CRUD : boolean add​(E e) E get​(int index) 底层为链表,增删快,查询快 Vector 标记: class 底层数组实现,线程安全,速度太慢,没用 CopyOnWriteArrayList 标记: class Set 标记: interface HashSet 标记: class CRUD : boolean add​(E e) boolean remove​(Object o) 底层哈希表,基于hashCode的equals的比较方式,线程不安全,存取速度快。 SortedSet 标记: interface TreeSet 标记: class 实现comparable接口,元素是以二叉树的形式存放的。线程不安全 CopyOnWriteArraySet 标记: class Queue 标记: interface BlockingQueue 标记: interface ArrayBlockingQueue LinkedBlockingQueue ConcurrentLinkedQueue 标记: class Map 标记: 顶级接口 HashMap 标记: class V get​(Object key) V put​(K key, V value) Set<K> keySet​() Set<Map.Entry<K,V>> entrySet​() 线程不安全,速度快,允许存放null键,null值。 SortedMap 标记: class TreeMap 对键进行排序 HashTable 标记: class Properties 标记: class 线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。 Collections 标记: 均以synchronized实现, 性能没用提高 synchronizedCollection synchronizedList synchronizedSet synchronizedMap synchronizedSortedSet synchronizedSortedSet JUC CopyOnWriteArrayList 写有锁,读无锁,读写之间不阻塞,优于读写锁 写入时先copy一个容器副本,再添加新元素,最后替换引用 copy的容器副本过大时,速度慢,不易使用 CopyOnWriteArraySet 底层使用CopyOnWriteArrayList实现 使用addIfAbsent()添加元素时,会遍历数组,如果存在元素,则抛弃副本 ConcurrentHashMap 初始容量默认为16段(segment),使用分段锁设计 ConcurrentLinkedQueue 高并发下性能最好的队列 无锁,采用CAS比较算法,核心参数(V,E,N) V:要更新的变量 E:预期值 N:新值 只有当V==E时,V=N;否则表示已被更新过,则取消当前操作 阻塞队列 BlockingQueue接口 void put(E e) 将指定元素插入此队列,如果没有可用空间,则等待 E take()获取并移除此队列头部元素,如果没有可用元素,则等待 ArrayBlockingQueue 数组结构实现,有界队列,手工固定上限 LinkedBlockingQueue 链表结构实现,无界队列(默认上限Integer.MAX_VALUE)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值