一、Set接口

public interface Set<E> extends Collection<E>

方法与Collection一样

  • 不包含重复元素
  • 没有带索引的方法,不能用普通for遍历
  • 无序
    image.png
2.1 案例:存储字符串并遍历

创建对象:
Set是接口,需要用实现类HashSet()来创建

public class HashSet<E> implements Set<E>

·

Set<String> s = new HashSet<String>();
HashSet()不对存储顺序保证

image.png

Set()不包含重复元素

image.png
image.png

2.2 哈希值

image.png

同一个对象的hash值一样
默认情况下,不同对象的hash值不同。
image.png
(如果在类里重写了hashCode(),可以实现不同对象的哈希值相同
image.png

二、HashSet()类

public class HashSet() implements Set

  • HashSet集合实现了Set接口,底层是哈希表
  • 无序,存入和取出的顺序不能保证一致
  • 没有索引方法,不能普通for遍历,但是可以Iterator 和 增强for遍历
  • 和Set一样不包含重复元素
    image.png
    image.png

    四、HashSet如何保证无重复元素

    image.png
    image.png

    五、哈希表

    是一种数据结构
    JDK8之前底层是数组+链表
    JDK8之后长度过长时进行了优化
    image.png
    首先计算存入字符串的哈希值,HashSet()无参构造方法默认长度是16,然后将哈希值对16取余,按余数存储。
    余数相同,看哈希值是否相同,哈希值相同看内容是否相同,这里相同就不存进去。


MeeWoW
18 声望1 粉丝

加油