hashset去重原理_Java之HashSet,Linkedset常用功能以及介绍

本文介绍了HashSet如何实现去重功能,重点在于自定义类在HashSet中排除重复值的原理。通过重写hashCode和equals方法,可以使自定义类对象在HashSet中正确比较。HashSet依赖哈希算法,若不重写,每个对象将获得不同编号,无法进行内容比较。LinkedHashSet则保持插入顺序。此外,提供了Eclipse中快速重写hashCode和equals的方法。
摘要由CSDN通过智能技术生成
805bb4a0c303683c1ad862588d7078c7.png

HashSet

Set的子类

固然 其有无序 不会有重复值的功能

说到这 为什么HashSet中不会有重复的元素呢?

首先对于java自带的数据类型而言(像String Integer 等) java自身就已经重写了里面的叛变方法

然而对于 自定义的数据类型(也就是自定义的类而言呢)如果不关心其底层方法如何实现的话

那么将会丧失HashSet中独有的排除重复值的功能

那么怎么样去解决自定义类排除重复值的功能 其实很简单

重写自定义类中的hashCode 和euqals方法就行

由于都明白 HashSet的底层是由哈希算法实现的 通过哈希算法每个对象将会返回一个int值

至于怎么算我就不说了。 通过这个int值 就相当于给每个创建的对象一个编号 如果不重写这个int值的话 那么每个对象都会获得不同的编号 而不会比较其内容 所以自然而然 HashSet的去重方法也就没有了 因此需要更改这个int值 然后当对象创建出来的时候(如果是相同的对象就是同一个int值 那么再去比较equals方法 来判断其属性(内容))

当然友好的eclipse为我们提供了重写HashCode和equals的方法(快捷键操作 ctrl+alt+s+h) 这样方便许多

尽管这样 但是对于其原理的理解依然要熟记于心

LinkedHashSet 是HashSet的子类

底层链表实现 功能就是 怎么存怎么取(FIFO) 按照存储的顺序 去取元素

存a,b,c,d 取 a,b,c,d 因此效率比HashSet低一些

实现自定义类去重功能的代码

import java.util.HashSet;import com.heiam.bean.Person;public class Demo1_HashSet {/** * @param args * Set集合,无索引,不可以重复,无序(存取不一致) */public static void main(String[] args) {//demo1();HashSet hs = new HashSet<>();hs.add(new Person("张三
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值