True or False? and WHY??? Java HashSet Contains
import java.util.HashSet; public class MyClass
{
public String s; public MyClass(String s)
{
this.s = s;
} public int hashCode()
{
return s.hashCode();
} public boolean equals(Object obj)
{
if(obj == null)
return false; if(!(obj instanceof MyClass))
return false; MyClass other = (MyClass)obj;
if(s == null)
{
return false;
} return(s.equals(other.s));
} public static void main(String[] args)
{
HashSet<MyClass> set = new HashSet<MyClass>(); MyClass mc1 = new MyClass("a");
set.add(mc1); mc1.s = "b"; MyClass mc2 = new MyClass("b"); if(set.contains(mc2))
{
System.out.println("True");
}
else
{
System.out.println("False");
}
}
}
结果是False
我猜原因是:
在向set存储时。位置是使用之前的哈希值得到的。
之后改变了mc1.s使得其哈希值发生了变化。
调用contains方法时,找的是之后哈希值指向的位置。这是尽管mc1和mc2有同样的哈希值、且true == mc1.equeals(mc2)。但在该位置上根本没有存储东西,所以返回false
另外刚才找到Set的API文档里有这么一段话
Note: Great care must be exercised if mutable objects are used as set elements. The behavior of a set is not specified if the value of an object
is changed in a manner that affects equals comparisons while the object is an element in the set.
这样结果是False或许就是由于HashSet的实现方法(用了哈希散列存储)~~
True or False? and WHY??? Java HashSet Contains的更多相关文章
- 数据库 SQL :有关 NULL 值引发 TRUE、FALSE、UNKNOW 三值逻辑
在 Java.C# 中,相信如果是 boolean 类型值,只有两种选择 true.false.然而,在 SQL 查询中,NULL 值的引入,使得新增了 UNKNOW ,因此,就产生了 TRUE.FA ...
- Jdbc Url 设置allowMultiQueries为true和false时底层处理机制研究
一个mysql jdbc待解之谜 关于jdbc url参数 allowMultiQueries 如下的一个普通JDBC示例: String user ="root"; Strin ...
- Java HashSet对txt文本内容去重(统计小说用过的字或字数)
Java HashSet对txt文本内容去重(统计小说用过的字或字数) 基本思路: 1.字节流读需要去重的txt文本.(展示demo为当前workspace下名为utf-8.txt的文本) 2.对读取 ...
- 数据库 定义 bit 类型 (true=1,false=0)
当Sql Server数据库定义 数据 为 bit 类型时, 编写代码时 要用 true or false 赋值. 例如: OffTheShelf 定义类型为 bit 后台赋值时 OffTheSh ...
- MySQL数据库中tinyint类型字段读取数据为true和false
今天遇到这么一个问题,公司最近在做一个活动,然后数据库需要建表,其中有个字段是关于奖励发放的状态的字段,结果读取出来的值为true 一.解决读取数据为true/false的问题 场景: 字段:stat ...
- javascript中的true和false
今天遇到一个问题,执行下面的代码返回true还是false?请说明理由 console.log([] == ![]) 在浏览器中运行了一下,发现结果是true.为什么会这样呢?于是查找了相关的资料. ...
- ***php解析JSON二维数组字符串(json_decode函数第二个参数True和False的区别)
客户端的请求体中的数据:[{"msg_id": 1, "msg_status": "HAS_READ" }, { "msg_id& ...
- [android警告] AndroidManifest.xml警告 Should explicitly set android:allowBackup to true or false
http://www.cnblogs.com/javadu/p/3812528.html Android中AndroidManifest.xml警告 Should explicitly set and ...
- JavaScript中值的真真假假(true and false)
值为flase的有: false 0 "" //空串 null undefined NaN 除了以上的之外的都是ture,包括"0" (zero in quot ...
随机推荐
- 编写函数int count_number_string(char str[])和函数int maxnum_string(char str[])
题目如图: 这里不再赘述 代码: //字符串中统计与查询 //杨鑫 #include <stdio.h> #include <stdlib.h> #include <st ...
- 0x41 并查集
太菜了才做到并查集啊啊啊啊啊啊啊啊啊啊啊 还是很有收获的说 水 bzoj4195: [Noi2015]程序自动分析 好题 poj1456 感受到并查集传递性的美妙啊!对于一个商品,去找他过期前那天的集 ...
- 9-21 调试javaweb 数据库连接感想
如何找bug 一步步调试 数据库链接写一个简单的 test 数据库操作 sql语句 写一个类 测试一下 不要忽略细节 最后页面的显示 html "/head"少一个"/& ...
- CSS实现栅格布局
CSS实现栅格布局 设置容器container: .grid-container { width: 100%; max-width: 1200px; } 清除浮动: .row:before, .row ...
- Element-ui组件--pagination分页的使用
一般在写前端页面时,经常会遇到分页这样的效果,element-ui中便有这样的插件,用vue框架使用的很方便,在此做一总结: <template> <div class=" ...
- c#初学12-12-为什么mian函数必须是static的
c#初学12-12-为什么mian函数必须是static的 c#程序刚开始启动的时候都会有唯一一个入口函数main()函数, 而非静态成员又称实例成员,必须作用于实例.在程序刚开始运行的时候,未建立任 ...
- poj2406 Power Strings (kmp 求最小循环字串)
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 47748 Accepted: 19902 ...
- Python数据分析8-----网页文本处理
1.去除网页的标签,如<br/> from bs4 import BeautifulrSoup preData=BeautifulSoup(data,'html.parser').get_ ...
- 基础——(4)SR Latch(SR锁存器)
Digital logic gets really interesting when we connect the output of gates back to an input. The SR l ...
- Vue学习之路第三篇:插值表达式和v-text的区别
上一篇说到插值表达式有一个问题: 页面频繁刷新或者网速加载很慢的时候,页面会先出现“{{ msg }}”,再一闪而过出现真实的数据. 对于这个问题Vue给予了解决办法,看具体事例. <div i ...