hashset并不是线程安全的,使用hashset需要对操作对象加锁,才能更好的保证线程安全。其实查看源代码发现HashSet内部维护数据的采用的是HashMap,根本原因是HashMap不是线程安全的类。导致了HashSet的非线程安全。
一、基本介绍
HashSet简单的理解就是HashSet对象中不能存储相同的数据,存储数据时是无序的。但是HashSet存储元素的顺序并不是按照存入时的顺序(和List显然不同) 是按照哈希值来存的所以取数据也是按照哈希值取得。存储是无序的这就和C++里的Set就不一样了C++里面的Set是有序的我认为这是在使用时候的主要区别。
二、常用方法
boolean add(E e) 如果当前列表中不存在e, 则将e加入列表 void clear() 从列表中删除所有元素 boolean contains(Object j) 判断列表中是否有元素j Iterator<E> iterator() 得到当前列表的遍历器 boolean remove(Object j) 如果列表中存在元素j,则将其从列表中删除 int size() 得到列表中元素的个数