java set hashcode_Java学习笔记_180724_HashSet_hashCode()
HashSet
泛型E必须重写hashCode方法,否则会导致add结果与预期不符
如
class NewClass{
String s;
public NewClass(String s){
this.s=s;
}
@override
public int hashCode(){
//此处返回字符串s的hashCode()
return s.hashCode();
}
}
NewClass n = new NewClass("1");
NewClass n1 = new NewClass("1");
Set set= new Set<>();
set.add(n);
set.add(n1);
sout(set.size());
若不重写hashCode()则输出为2,若重写hashCode()则输出为1。为什么会这样?
查看HashSet的的源码会发现,HashSet的Contains方法,和add方法,其实是引用了HashMap的containskey()和put()方法。
而这HashMap的这两个方法都用到了泛型类的hashCode()
连个方法中的hash()方法代码如下:
返回值都和泛型E.hashCode()有关,所以当自建类作为泛型类生成HashSet和HashMap时需要重写自建类的hashCode()。
如果hashCode()没有重写,则调用的是java.lang.Object的hashCode()
刚看到这行代码的时候是懵逼的,没有方法体,这不是抽象类吗?然后百度了native修饰符,发现这篇文章写得很清楚https://www.cnblogs.com/Qian123/p/5702574.html,native是于其他语言(如C++)联合开发是使用的,也就是说hashCode()方法的方法体是其他语言实现的,具体调用时由JNI(java native interface)调用其他语言生成的库文件,如dll文件。
java set hashcode_Java学习笔记_180724_HashSet_hashCode()相关推荐
- java/android 设计模式学习笔记(1)--- 单例模式
前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...
- java.util.List学习笔记
概述 在Java中,List是一种特殊的集合结构,即:List是一种有序的集合.在List接口的实现中,需要提供根据列表下表对元素进行操作的方法,包括:插入,删除,查询和修改等: List一般允许重复 ...
- Java快速入门学习笔记9 | Java语言中的方法
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
- Java快速入门学习笔记8 | Java语言中的数组
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
- Java快速入门学习笔记7 | Java语言中的类与对象
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
- Java快速入门学习笔记6 | Java语言中的for循环语句
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
- Java快速入门学习笔记5 | Java语言中的while循环语句
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
- Java快速入门学习笔记4 | Java语言中的if条件语句
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
- Java快速入门学习笔记3 | Java语言中的表达式与操作符
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
最新文章
- linux输出指定数量脉冲,ESM335x Linux输出脉冲计数
- java docx word api_javadoc生成word接口文档
- elasticsearch源码分析之search模块(server端)
- C# Byte数组与Int16数组之间的转换
- CentOS中的中文乱码问题的解决
- how is SAP ui5 formatter resolved
- ceph升级到10.2.3 版本启动服务报错:Unknown lvalue 'TasksMax' in section 'Service'
- Non-resolvable parent POM for com.supermarket:supermarket:0.0.1-SNAPSHOT: Could not transfer artifac
- ajax 通过json xml文件,php+Ajax处理xml与json格式数据的方法示例
- Go 语言学习总结(7)—— 大厂 Go 编程规范总结
- .net remoting的事务传播以及wcf分布式事务
- php获取数据3中方式,PHP面向对象之3种数据访问方式详解(代码实例)
- Struts标签 bean:write用法
- 最全的c#日期函数 winform
- eXtremeComponents 分页列表
- SOUI知识点小结2
- 计算机综述论文能发期刊吗,计算机核心期刊哪些好发
- 机器学习系列文章【转自我的新浪博客】
- uiautomator xpath筛选父级通框架内子元素调用
- (深度学习快速入门)第三章第一节:多层感知器简介
热门文章
- fck java_FCkjava三种调用方法
- LeetCode:二进制手表【401】
- css div设置inline-block后 div顶部对齐
- 数据库SQL优化大总结之 百万级数据库优化方案(转载)
- Windows phone 应用开发[14]-调用WebBrowser
- boost学习之boost::lock_guard源码分析
- 深入理解Linux内核链表
- 饥荒联机版服务器显示错误,小白求问 搭服务器出现这种情况是怎么回事
- MDK530编译出现ARM版本不符问题
- 计算机软件需求规格说明规范_太阳能(光伏)组件安全规范测试简介_丙观科技