关于JAVA Set容器contains的问题

class AAA{
int x;
public AAA(int x) { this.x=x;}
public int hashCode() { return x*11+17;}
public boolean equals(AAA e) { return this.x==e.x;}
}

public class 参数{
public static void main(String[] args) {
HashSet set = new HashSet();
AAA a1 = new AAA(5);
AAA a2 = new AAA(5);
System.out.println(a1.equals(a2));
System.out.println(set.add(a1));
System.out.println(set.contains(a2));
}
}

明明a1和a2是相等的,但contains返回的是false,请问要怎么改?

5个回答

在AAA类中加入以下代码:

    public boolean equals(Object o) {
        return true;
    }


    public int hashCode() {
        return 1;
    }
就会出现你想象的结果了

你把equals方法改写成比较对象的值了,原来的equals是 return (ObjectA==ObjectB );
你看看equals和==的区别

contains()底层比较的是内存中的对象,因为a1 a2在内存中就是两个不同的对象啊

equals方法不是重写,是重载,必须重写才有效,要这样写

@Override
    public boolean equals(Object e) {
        return this.x == ((AAA)e).x;
    }

在写重写时不确认是否写对,加上@Override注解很有用的,eclipse会检查是否错误

HashSet的底层实现是hashmap,contains方法是直接调用的containsKey方法,可以看下hashmap中的实现,
首先根据hash值下标找到元素,然后比较元素的key是否相等,
这时的比较使用的是“==”符号,没错就是比较的是否同一个实例。所以返回false,如果想要返回true需要重写HashSet的contains该方法
题主可以看下我的博文:https://blog.csdn.net/u010597819/article/details/87625247,里面有对集合实现原因的概述

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
有关list和set的contains问题和对象的hashcode问题

import java.util.ArrayList; import java.util.HashSet; public class Foo { int value; Foo(int value){ this.value=value; } /* public int hashCode() { final int prime = 31; int result = 1; result = prime * result + value; return result; }*/ public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Foo other = (Foo) obj; if (value != other.value) return false; return true; } public static void main(String[] args) { ArrayList list=new ArrayList(); HashSet set = new HashSet(); list.add(new Foo(1)); set.add(new Foo(1)); System.out.println(list.contains(new Foo(1))+":"+set.contains(new Foo(1))); } } 一个Foo类,在没有hashcode方法的时候,list的contain返回true set是false 在加上hashcode之后,两个都为false,这是为什么? list的contain和set的contain是怎么判断的?

关于java Set的compareTo方法的问题

这几天学习java set集合的时候发现一个这个问题,当我写一个类并且实现Comparable接口的方法,在Test类main方法中生成一个A对象,然后将这个A对象add到set调试到compareTo方法发现this和o的地址指向同一个地址,各位大咖能告诉我为什么吗?谢谢 ``` /** * Created by wanli on 2017/8/5. */ public class A implements Comparable<A> { private int age; public A(int age) { this.age = age; } public A() { } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(A o) { return o.getAge() - this.age; } @Override public String toString() { return "A{" + "age=" + age + '}'; } } ``` ``` public class Test { public static void main(String[] args) { TreeSet<A> set = new TreeSet<>(); A a = new A(14); A b = new A(13); set.add(a); set.add(b); for (A a1 : set) System.out.println(a1.toString()); } } ``` ![图片说明](https://img-ask.csdn.net/upload/201708/07/1502091932_511091.png)

java set集合快速查找?

看书说散列集(表)即hashtable可以快速查找元素。但是据我所知,hashset并没有查找元素的方法。<br/> 如果要快速找到一个元素,首先要获得该元素的hashcode,但是我也没见过什么保存hashcode的代码。<br/> 只有获得这个元素的前提下才能计算出它的hashcode,可是我都获得这个元素了,还要去集合里面查找干嘛?

一个Java的Set的remove问题

为什么改变值后,无法删除? ``` package mytest; import java.util.HashSet; import java.util.Set; public class Key { int i; public Key(int i) { this.i = i; } public int hashCode() { return i; } public boolean equals(Object obj) { return i == ((Key)obj).i; } public static void main(String[] args) { Set<Key> set = new HashSet<Key>(); Key k1 = new Key(1); Key k2 = new Key(2); set.add(k1); set.add(k2); System.out.println("原来:"+set); set.remove(k1); System.out.println("删除k1后:"+set); k2.i = 1; System.out.println("改变k2.i为1后:"+set); boolean f = set.remove(k2);//这里为什么失败? System.out.println("是否删除k2?:"+f); System.out.println("删除操作后:"+set); k2.i = 2; System.out.println("改变k2.i为2后:"+set); f = set.remove(k2); System.out.println("是否删除k2?:"+f); System.out.println("删除操作后:"+set); } } ```

java hashset.contains怎么取出存在的元素

hashset.contains返回true了,怎么取出这个存在的元素呢? 补充: 是我没说完整 set里面保存的是一个key/value对,我重写了hashcode和equals让contains在判断的时候只判断key是否出现,现在key出现了我要取出这个key对应的value值..

java set1的元素全部复制给set2

今天做题 偶然发现一个错误,在我的理解中,我是创建了2个set,这应该算是2个对象,他们应该有不同的地址。搞不懂为什么第二次往set2中添加元素,set1中也会添加。 例如: import java.util.*; public class test{ public static void main(String[] args){ HashSet<Integer> set1=new HashSet<Integer>(); HashSet<Integer> set2=new HashSet<Integer>(); set1.add(1); set2=set1; set2.add(2); Iterator iterator1=set1.iterator(); while(iterator1.hasNext()){ System.out.println(iterator1.next()); } Iterator iterator2=set2.iterator(); while(iterator2.hasNext()){ System.out.println(iterator2.next()); } } } 输出结果为 1 2 1 2

VS学习set容器出现运行出现问题

生成通过,但是运行的时候出现如下提示,这是什么问题呢?应该怎么解决啊?![图片](https://img-ask.csdn.net/upload/201701/14/1484364634_250598.jpg)

关于Set的类型转换(Java)

这里是一个Courses类,Student类和SetTest类, 其中SetTest类中用List存储可选课程,再把选到的课程存储到Student类定义的Set对象中 为什么我在SetTest类中foreach循环Set对象会提示转换不了Courses类型,我在Student类已经设置了类Set<Courses> 求大神讲解!!!!小弟才疏学浅啊!! ![图片说明](https://img-ask.csdn.net/upload/201604/02/1459593777_413495.png) ![图片说明](https://img-ask.csdn.net/upload/201604/02/1459593786_540823.png) ![图片说明](https://img-ask.csdn.net/upload/201604/02/1459593795_880006.png) ![图片说明](https://img-ask.csdn.net/upload/201604/02/1459593805_529828.png)

java中的容器类可以嵌套吗?

我想构造一个二维的数组,行数是Vector类型的,然后每一行都是Set类型的,如下: ``` Vector<Set<Integer>> g=new Vector<Set<Integer>>(); ``` 这样合理吗?

Java Set存进去一个类后,如何再次提出来,并读取其中的元素的属性值

举个例子: class Number 中定义了两个属性,int a ,int b 将class Number 实例化为num后 使用set.add(num)添加进set当中, 问:如何通过set来读取num.a与num.b?

java8 新特性 stream,set 转 map<String, Set<>> 问题

``` class User{ String type; String userId; ... } // 现有 Set<User> users; 需要将相同 type 转成 Map<Stirng, Set<User>> // 需要怎样用 stream // 使用的 for 循环 Map<String, Set<User>> map = new HashMap<>(); for (User u : users) { if (!map.containsKey(u.getType())) map.put(u.getType(), new HashSet<User>()); map.get(u.getType()).add(u); } // 使用 stream 怎样实现相同同能 ```

java Button setsize无效原因?

import javax.swing.*; import java.awt.Color; import java.awt.event.*; public class OODemo implements ActionListener{ JButton button; public static void main(String args[]){ OODemo demo=new OODemo(); demo.go(); } public void go(){ JFrame frame=new JFrame(); button=new JButton("trust me"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//会在windows关闭是结束程序 frame.getContentPane().add(button); frame.setSize(300,500); frame.setVisible(true); button.setSize(20, 300);//**实际运行这里怎么改参数button大小都不改变** button.setBackground(Color.blue); button.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub button.setText("I've been clicked!"); } }

c++中向set容器中插入数据出错

定义了一个二叉树节点,节点数据里包含set<int>,当用T->s.insert()插入数据时就运行停止了,编译能通过,就是一到那里插数据时就停止工作了,希望大神解答!急急急!

求java 将int[]导入Set的方法

在网上找了一个方法,可是好像只能用于类的数组,例如String[];代码台下: public static <T extends Object> Set<T> Array2Set(T[] tArray) { Set<T> tSet = new HashSet<T>(Arrays.asList(tArray)); return tSet; } 若用int[]做参数会出错; 当然可以用最笨的方法,如: for(int i=0;i<int[].lenth;i++){ Set.add(int[i]); } 问有没有可以将int[]导入Set的库函数.

C++标准库中,set容器的insert函数中的比较函数重写问题

在**set **容器里我把它的其中的元素定义为map,然后我就不会写compare函数了。因此他的insert函数就跪了……求大神助……哭……

java中怎么实现set类里的数据随机数据

我想创建一个可以无序存储数据的类,然后我使用Set类,我发现Set类虽然不是按输入的数据进行储存, 但是还是有一定的顺序,查阅相关资料,大都是使用List类来实现随机顺序,我想问问有没有什么方法用 用Set类也可以实现随机顺序的。谢谢了~~~

java中怎么重写getset方法?

请教 /** *银行入账日期 */ private String sy101; /** *银行入账时间 */ private String sy102; /** *交易时间 */ private String time; public String getSy101() { return sy101; } public void setSy101(String sy101) { this.sy101 = sy101; } public String getsy102() { return sy102; } public void setsy102(String sy102) { this.sy102 = sy102; } time的值等于sy101+sy102,time的get,set方法应该怎么写

java问题,Set使用问题

定义一个Set,向Set中存储5个人名,其中有两个是重复的,输出Set集合的数据,通过for each,和Iterator两种方法。

java集合类Set存储的运用

定义一个Set,向Set中存储5个人名,其中有两个是重复的,输出Set集合的数据,通过for each,和Iterator两种方法。

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Linux 会成为主流桌面操作系统吗?

整理 |屠敏出品 | CSDN(ID:CSDNnews)2020 年 1 月 14 日,微软正式停止了 Windows 7 系统的扩展支持,这意味着服役十年的 Windows 7,属于...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

学习总结之HTML5剑指前端(建议收藏,图文并茂)

前言学习《HTML5与CSS3权威指南》这本书很不错,学完之后我颇有感触,觉得web的世界开明了许多。这本书是需要有一定基础的web前端开发工程师。这本书主要学习HTML5和css3,看...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

记一次腾讯面试,我挂在了最熟悉不过的队列上……

腾讯后台面试,面试官问:如何自己实现队列?

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

冒泡排序动画(基于python pygame实现)

本项目效果初始截图如下 动画见本人b站投稿:https://www.bilibili.com/video/av95491382 本项目对应github地址:https://github.com/BigShuang python版本:3.6,pygame版本:1.9.3。(python版本一致应该就没什么问题) 样例gif如下 ======================= 大爽歌作,mad

Redis核心原理与应用实践

Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂,和Mysql一样,是个读取数据的软件。 有一个理解是Redis是key value缓存服务器,更多的优点在于对value的操作更加丰富。 安装 yum install redis #yum安装 b...

现代的 “Hello, World”,可不仅仅是几行代码而已

作者 |Charles R. Martin译者 | 弯月,责编 | 夕颜头图 |付费下载自视觉中国出品 | CSDN(ID:CSDNnews)新手...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

立即提问
相关内容推荐