Set集合类似于一个罐子,程序可以把多个元素扔进罐子里,而Set集合不能记住元素添加的顺序;Set集合中不允许保存相同的对象
一、HashSet
HashSet是Set接口的典型实现,大多数时候使用Set集合时就是使用这个实现类。HashSet按照Hash算法来储存集合中的元素,因此具备很好的储存和查找性能
1.1、HashSet具备的特点
- - 不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化
- - 集合的元素值可以为null
- - HashSet不是线程同步的,如果多个线程同时访问一个HashSet,假设有两个或者两个以上线程同时修改了HashSet集合时,则必须通过代码来保证其同步
1.2、常用方法
void add(Object obj) | 向Set集合中添加一个元素 |
int size() | 获取Set集合中元素的个数 |
boolean remove() | 从Set集合中删除元素,删除成功返回true |
void clear() | 删除Set集合中的所有元素 |
boolean contains(Object obj) | 查询Set集合中是否包含指定的元素,如果包含就返回true |
Iterator iterator() | 获得Set集合的迭代器,用于遍历集合元素 |
二、LinkedHashSet
LinkedHashSet是HashSet的子类,LinkedHashSet集合也是根据hashCode值来决定元素的储存位置,但他同时使用链表来维护元素的次序,这样使得元是以插入的顺序来保存的。
LinkedHashSet需要维护元素的插入顺序,因此性能略低于HashSet的性能
三、面试题
需求:随机生成5个0-10之间的整数,要求数字不可以重复
分析:
(1)将生成的随机数放置到Set集合中
(2)用迭代器遍历Set集合
(3)用ForEach遍历Set集合
四、Collections工具类
集合工具类,针对于List集合提供一系列功能的操作
4.1、常用方法
void sort(Collection c) | 对集合中的元素按照自然顺序进行排序 |
Object max(Collection c) | 获取集合中的最大元素,并且返回最大元素 |
Object min(Collection c) | 获取集合中的最小元素,并且返回最小元素 |
boolean replaceAll(Collection c, Object ele1, Object ele2) | 元素替换,将集合中的所有元素ele1替换成ele2 |