散列技术;hashset判断重复,类比较先检查hashcode,再检查equals比较内容;java垃圾回收是定时的

本文介绍了散列技术原理及特点,重点讲解如何通过散列函数实现高效数据访问,并探讨了冲突解决方法。同时,深入分析了Java中HashSet的内部实现机制,包括hashCode和equals方法在元素去重中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

散列技术可以提供与数据规模无关的固定访问速度,这在大数据时代尤其重要。散列技术通过散列函数与冲突解决来实现快速访问。

通过数学公式计算 •从键值映射到某个地址空间 •目标空间比键空间要小
–有可能会冲突
–冲突需要解决方法
–最简单的方案是顺序向后寻找空位

散列特点 •不管数据规模,查找速度恒定 •空间比实际需要多 •是空间换时间的典范

HashSet利用了其内部使用散列算法的便利,它判断重复的方法是:首先用hashCode来排除大部分的重复断定;再对“疑似”重复的,通过equals函数做最后的判定。

PS:java垃圾回收是定时的,循环变量最好声明在外边

package com.zhangle.arithmetic;


import java.util.HashSet;
import java.util.Set;
class Person{
private String name;
private int age;
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public String toString(){
return name+" is "+age;
}

public boolean equals(Object x) {
if ((x instanceof Person)==true) {

Person p=(Person)x;
if (this.name==p.name&&this.age==p.age) {
return true;
}

}
return false;

}
//只是在equals中返回true是不够的,还得确保hashcode相同,equals只是比较内容
public int hashCode() {
return name.hashCode()+age;
}
}
public class HashSetTest {

public static void main(String[] args) {
//string的内容放在字符串区,不允许重复,equals比较是直接比较内容
/* Set<String> a=new HashSet<String>();
a.add("abc");
a.add("xyz");
a.add("abc");
System.out.println(a);*/
//类比较先检查hashcode,再检查equals比较内容,两个都是true,才说明是真的相同
Set<Person> b=new HashSet<Person>();

b.add(new Person("kane",10));
b.add(new Person("kane",11));
b.add(new Person("kane",10));
b.add(new Person("li",10));
System.out.println(b);


}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值