HashSet

文章目录

HashSet

底层的数据结构是数组和单向链表。

特点:

  • 元素是无序的,存取时没有顺序。Hash 算法是一种散列算法,具有幂等性。
  • 元素不会重复。

HashSet 判断元素是否重复的逻辑如下:

  • 先对比元素的内存地址(hashCode)是否相同,如果不同,就根据哈希散列算法,映射到数组中的不同位置。
  • 如果内存地址相同,再使用 equals 方法比较它们的值,如果不同,就进行存储,并用链表关联它们。如果还相同,就直接丢弃。

因此,可以通过重写元素对象的类的 hashCode 方法和 equals 方法,来影响 HashSet 中元素是否重复的判断逻辑。

HashSet 修改数据时,需要先删除,再添加。

示例

HashSet set = new HashSet();
set.add("jack");
set.add("jack");  // 可以写,但不起作用
set.add("rose");
set.add("lily");
System.out.println(set); // [lily, rose, jack]

// 删除数据
set.remove("lily");
// 再新增
set.add("neil");
System.out.println(set); // [neil, rose, jack]

// 遍历数据
for (Object e : set) {
    System.out.println("容器中的元素:" + e);
}

// 获取容器的容量
System.out.println(set.size()); // 3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值