一、Set接口
public interface Set<E> extends Collection<E>
方法与Collection一样
- 不包含重复元素
- 没有带索引的方法,不能用普通for遍历
- 无序
2.1 案例:存储字符串并遍历
创建对象:
Set是接口,需要用实现类HashSet()来创建
public class HashSet<E> implements Set<E>
·
Set<String> s = new HashSet<String>();
HashSet()不对存储顺序保证
Set()不包含重复元素
2.2 哈希值
同一个对象的hash值一样
默认情况下,不同对象的hash值不同。
(如果在类里重写了hashCode(),可以实现不同对象的哈希值相同
二、HashSet()类
public class HashSet() implements Set
- HashSet集合实现了Set接口,底层是哈希表
- 无序,存入和取出的顺序不能保证一致
- 没有索引方法,不能普通for遍历,但是可以Iterator 和 增强for遍历
和Set一样不包含重复元素
四、HashSet如何保证无重复元素
五、哈希表
是一种数据结构
JDK8之前底层是数组+链表
JDK8之后长度过长时进行了优化
首先计算存入字符串的哈希值,HashSet()无参构造方法默认长度是16,然后将哈希值对16取余,按余数存储。
余数相同,看哈希值是否相同,哈希值相同看内容是否相同,这里相同就不存进去。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。