探究HashSet如何判断元素相同

本体(Ontology)概述 认识本体        本体(Ontology)的概念源自于哲学领域,在哲学中的定义为“对世界上客观事物的系统描述,即存在论”。哲学中的本体关心的是客观现实的抽象本质。而在计算机领域,本体可以在语义层次上描述知识,可以看成描述某个学科领域知识的一个通用概念模型。德国学者Studer在1998年给出了本体的相关定义“本体是共享概念模型的形式化规范说明”。这个定义包含了四层含义:即共享(share)... 阅读详情

        下面程序提供了A、B、C三个类,他们分别重写了equals(),hashcode(),两个方法中的一个或全部,通过此程序我们能大概看到HashSet判断元素相同的标准 。

package shi;

import java.util.HashSet;

//类A重写了equals()方法,使equals()方法总是返回true,但是没有重写hashCode()方法
class A {
	
	public boolean equals(Object obj) {
		return true;
	}
}

//类B重写了hashCode()方法,使hashCode()方法总是返回1,但是没有重写equals()方法
class B {
	
	public int hashCode() {
		return 1;
	}
}

//类C重写了两个方法,hashCode()方法总是返回2,equals()方法方法总是返回true
class C {
	
	public boolean equals(Object obj) {
		return true;
	}
	public int hashCode() {
		return 2;
	}
	
}

public class Practice1 {

	public static void main(String[] args) {
		HashSet<Object> set = new HashSet<Object>();
		//向set中添加两个A对象,两个B对象,两个C对象
		set.add(new A());
		set.add(new A());
		set.add(new B());
		set.add(new B());
		set.add(new C());
		set.add(new C());
		System.out.println(set);
	}

}

程序输出结果:

[shi.A@647e05, shi.B@1, shi.B@1, shi.C@2, shi.A@10dea4e]             

        class C 重写了两个方法,hashCode()总是返回2,equals()总是返回true。所以HashSet将两个C对象当成了一个。即使两个对象通过equals()方法比较返回为true,但是HashSet依然当成两个对象,即使两个对象的hashCode()返回值相同,HashSet也当成两个对象。

        如果两个对象通过equals()比较返回true,但是hashCode()返回值不同时,这将导致HashSet会把这两个对象保存在Hash表的不同位置,从而使两个对象都可以添加成功,这就与Set集合的规则冲突了。

注意:在重写equals()和hashSet()方法时,如果两个对象通过equals()方法比较为true时,应该使他们的hashCode()返回相同的值。


C语言头文件完全解析(连“#”我都给你讲明白) C语言头文件完全解析 引言 本文将尽量详细的介绍c语言的头文件所包含的知识,如有错误,还望指正。 萌新们肯定疑惑为什么每次打代码都要写一个所谓的头文件(如:#include<stdio.h>),这里先简单让大家有个了解,你所用的 printf("%d",a)就是这个 stdio里的东西,如果没有这个头文件,编译器都不知道 printf是个什么东东。所以头文件就是一个准备好的大仓库,你可... 阅读详情

相关推荐

emqx Java 订阅以及发送 结合若依框架

emqx Java 订阅以及发送 结合若依框架

Spo的博客 1613

HashSet判断元素相等的标准

 HashSet判断元素相等的标准:hashCode()相同,equals()方法相同: 1.新建一个类 package com; public class R {  private int count;  public R() {  }  public R(int count) {   this.count = count;  }  public int getCo

云水禅心 1087

流式数据湖存储技术,Apache Paimon是什么?

是一项流式数据湖存储技术,可以为用户提供高吞吐、低延迟的数据摄入、流式订阅以及实时查询能力。Paimon 采用开放的数据格式和技术理念,可以与 Apache Flink / Spark / Trino 等诸多业界主流计算引擎进行对接,共同推进 Streaming Lakehouse 架构的普及和发展。

一个写湿的程序猿 2万+

HashSet集合判断相等的条件

当什么情况下Set集合添加元素时,辨别输出的元素是否有重复值 下面给出了一个String对象和StringBuffer对象,输出的情况完全不同 import java.util.HashSet; import java.util.Set; public class ListTest { public static void main(String[] args) { Set<String> set1 = new HashSet<String>(); set1.add(

Gracener的博客 694

第2章 数据库关系模型-单元测验-数据库原理及应用

第2章 数据库关系模型---数据库与机器学习 作业 常用的关系查询操作包括选择、投影、连接、并、交等。 v 实体完整性是指关系表的属性组成必须是完整的。 x 自然连接是一种等值连接。 v 在参照完整性中,可以定义级联操作。 v 用户自定义完整性可以实施数据的业务约束。 v 每个关系是一个二维表,但二维表不一定是关系。 v 关系中复合键至少包含两个属性。 v 代理键是为了唯一标识关系的不同元组,需要在表单或报表中显示出来。 x ...

aiqq136的博客 5725

Open5GS实战指南:Ubuntu 22.04环境下的5G核心网快速部署

本文提供Open5GS在Ubuntu 22.04环境下部署5G核心网的实战指南,涵盖环境准备、MongoDB配置、核心组件安装、WebUI部署及网络调优等关键步骤。通过详细的安装教程和常见问题解决方案,帮助开发者快速搭建开源5G核心网测试环境。

weixin_29202213的博客 538

HashSet如何判断加入的元素是否相同?

如果有的同学搞不清楚equals()方法和hashCode()的区别和用法,请移步hashCode() 和equals() 区别和作用 class A { public boolean equals(Object obj) { return true; } } class B { public int hashCode() { return 1; } } class C

给今天画个满足的句号 927

手把手教你用STM32H743+FreeRTOS+LWIP搭建物联网网关(附完整工程)

本文详细介绍了如何使用STM32H743微控制器结合FreeRTOS实时操作系统和LWIP协议栈构建高性能物联网网关。内容涵盖硬件配置、FreeRTOS任务设计、LWIP协议栈优化及物联网协议集成,提供完整工程示例,助力开发者快速实现稳定可靠的网络通信枢纽。

weixin_42623010的博客 502

HashSet中关于hashCode()和Equals()

HashSet实现了Set接口HashSet底层是HashMap可以存放null值,但是只能有一个null值。HashSet取出是无序的,因为存储是在计算Hash值后,在确定索引位置,而遍历是顺序遍历。不能有重复元素.遍历使用迭代器或增强for循环(实际上还是调用的迭代器),不能使用普通for循环,因为没用提供get方法。......

m0_62953893的博客 744

机器学习第四个算法ANN(人工神经网络)

我是在14年9月刚读研的时候听到一个说法叫“类人脑算法”很火热,之后搞了很长一段时间相关的蓄水池算法等,但大都没有摸到门路而中途放弃了。现今看来,还是缺少一些知识背景,也不善于在网络上学习,随时间推移,也逐渐明白这是机器学习的一小部分,并且逐渐发展的名称叫做人工神经网络的算法,如果网络层较多,又会有个别名,叫做深度学习。其中个用到的最著名的算法是背向传输算法(backpropagation),而这个

legalhighhigh的博客 1万+

【阿里AgentScope框架】多框架组合:AgentScope加LangChain,让你的开发效率直线上升

本文以一个例子来看下AgentScope框架和LangChain如何实现融合使用,真的超级简单,一看就懂。这是一种思路,为多种框架的融合使用提供借鉴。

同学小张的博客 3472

hashcode()和equals()及HashSet判断对象相等

hashcode()和equals()及HashSet判断对象相等。 1. 首先equals()和hashcode()这两个方法都是从object类中继承过来的。 public boolean equals(Object obj)     指示某个其他对象是否与此对象“相等”。     equals 方法在非空对象引用上实现相等关系:      * 自反性:对于任何非空引用值 x,x.e

Robin Hu的专栏 7765

基于STM32L4XX、HAL库的AD7768BSTZ 模数转换器ADC驱动程序设计

/ 默认SPI配置。// 读取通道数据命令。// 通过SYNC_IN引脚触发转换(如果使用)// 处理数据...// 或者通过SPI命令。// 初始化AD7768。// SPI1引脚配置。

zhusl6688的博客 462

Java中HashSet集合元素的去重

当我们尝试向HashSet中添加自定义类的对象时,情况会稍微复杂一些。因为默认情况下,自定义类继承自Object类,其hashCode()和equals()方法的实现并不能满足我们的去重需求。所以,我们需要在自定义类中重写这两个方法。// 尝试添加重复元素System.out.println("HashSet中的Person对象: " + personSet);在这个例子中,我们定义了一个。

潜意识Java的博客 1198

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【潜意识Java】Java中HashSet集合元素的去重

当我们尝试向HashSet中添加自定义类的对象时,情况会稍微复杂一些。因为默认情况下,自定义类继承自Object类,其hashCode()和equals()方法的实现并不能满足我们的去重需求。所以,我们需要在自定义类中重写这两个方法。// 尝试添加重复元素System.out.println("HashSet中的Person对象: " + personSet);在这个例子中,我们定义了一个。

潜意识Java的博客 1241

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Collection探究之HashSet

HashSet存储元素的本质是利用HashMap的方法存储,所以存储的元素是无序的,不可重复的,每个存入的元素都是独一无二的,在HashSet中不允许存储null值。下面,我们来看下HashSet的源码。1. HashSet的定义public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, j

witness_mei的博客 402

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java容器源码分析——HashSet是如何保证元素的不可重复

一、前言 HashSet的基本特点是元素不可重复,但是不能保证元素的顺序;同时也是不同步的,所以多线程常见会存在线程安全问题。在开发过程中,HashSet是一个不错的去重工具。那是具体的实现机制是怎样的呢?马上开始揭晓。 二、源码解读 特性 HashSet继承了集合框架AbstractSet<E>,保证了集合的基本特征,实现了接口Set包含了基本集合操作,实现了接口Cloneable支持克隆,实现了Serializable支持序列化。 public class HashSet<

anyway8090的博客 601

JAVA学习心得——详述HashSet中的.add();方法

下列代码是向set集合中添加元素。 public class Test { public static void main(String[] args) { HashSet<String> set = new HashSet<>(); set.add("Tom"); 一个简单的.add方法,但是源码有很多值得耐人寻味的东西。 首先: HashSet<Str...

low1101的博客 6276

HashSet、TreeSet和泛型的一些运用

文章目录HashSetTreeSet泛型 HashSet HashSet的特点:数据结构是哈希表、元素是无序(存入和取出的顺序不一定一致),字符串元素不可以重复; 探究HashSet判断元素重复问题 原理:利用HashSet调用add方法的同时底层会自动调用HashCode()和equals()方法,重写两个方法,HashCode()比较的是内存地址,equals()比较的是元素内容 class ...

阳某的博客 699

我就不信你还不懂HashSet/HashMap的底层原理

HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。HashSet底层数据结构在JDK8做了一次重大升级,JDK8之前采用的是Hash表,也就是数组+链表来实现;

緑水長流*z 2282

Java中 判断集合中的元素相等的依据 详细解析

我们经常使用的集合如ArrayList,LinkedList,Vector, **你在调用contains()方法的时候, 或者是你在根据对象移除元素 remove(Object o) 你知道他们是如何判断集合中的元素是否 是相等的吗**? 接下来我们跟着源码去详细探究一下 数据数据结构不同判断的依据就不同,我们先来看一下List类的判断依据.先简单的了解一下 List类 : 有序,

武壮 1万+

HashSet如何避免存储重复元素(工作原理)

为了一探究竟我建议先上源码(以set的add方法为例)如下所示:原理hashSet底层是基于HashMap 来实现存储的,而set的 add方法其实调用的是map的put方法:继续探究map的put方法看其实如何实现存储不重复元素的 :可以看到在遍历table中的元素判断键和值,1,如果hash码值不相同,说明是一个新元素,存储;如果没有元素和传入对象(也就是add的元素)的hash值相等,那么...

辉哥的博客 4900

HashSet中add方法的执行过程

1.先对HashMap中的hash方法进行分析,为接下来的add方法的分析作铺垫 //记得用ctrl+shift+o引包 static int hash(Object key) { //这里把HashMap中的hash方法提取了出来放在本类里,便于执行后对其分析 int h; return (key == null) ? 0 : (h = key.hashCo...

CandidBoy的博客 324

c++ hashset的用法_HashSet:我就是个套壳儿 HashMap

我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。之前的7000 字说清楚 HashMap已经详细介绍了 HashMap 的原理和实现,本次再来说说他的同胞兄弟 HashSet,这两兄弟经常被拿出来一起说,面试的时候,也经常是两者结合着考察。...

weixin_32228727的博客 2402

集合框架(ArrayList去重复)和 (Hashset和Treeset的结构特点)

集合框架 集合框架ArrayList中的重复元素去重及其底层原理 判断list 集合中元素是否相同,原理是arrayList调用Contains()的方法,当调用Contains()方法时会自动调用它的底层equals()的方法,我们要将原有的集合遍历,再将遍历后的元素存放到新的集合中,存放前做一个判断,再重写equals()的方法。 package com.wangshoyang.collect...

byg 375

java中的HashSet和TreeSet的区别,以及HashSet导致的内存泄漏详解

Set集合中的元素是无序的,不可重复的。这个接口下有两个常用集合的实现,HashSet和TreeSet。 HashSet HashSet底层用的是哈希表,它把对象根据其哈希值存放到对应的区域里。由于这种特性,两个在不同区域的对象会被认为不相同的。 所以如果对象要存放到Hash集合里面,则需要重写对象的hashCode方法,让相等的对象的hashCode的值也相等。

元新星的博客 1万+
上一篇: Java中Set真的是无序的吗?
下一篇: 匿名类,自定义异常类的简单用法
bingoCoder
博客等级 码龄10年 1400粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值