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()相关推荐

  1. java/android 设计模式学习笔记(1)--- 单例模式

    前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...

  2. java.util.List学习笔记

    概述 在Java中,List是一种特殊的集合结构,即:List是一种有序的集合.在List接口的实现中,需要提供根据列表下表对元素进行操作的方法,包括:插入,删除,查询和修改等: List一般允许重复 ...

  3. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  4. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  5. Java快速入门学习笔记7 | Java语言中的类与对象

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  6. Java快速入门学习笔记6 | Java语言中的for循环语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  7. Java快速入门学习笔记5 | Java语言中的while循环语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  8. Java快速入门学习笔记4 | Java语言中的if条件语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  9. Java快速入门学习笔记3 | Java语言中的表达式与操作符

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

最新文章

  1. linux输出指定数量脉冲,ESM335x Linux输出脉冲计数
  2. java docx word api_javadoc生成word接口文档
  3. elasticsearch源码分析之search模块(server端)
  4. C# Byte数组与Int16数组之间的转换
  5. CentOS中的中文乱码问题的解决
  6. how is SAP ui5 formatter resolved
  7. ceph升级到10.2.3 版本启动服务报错:Unknown lvalue 'TasksMax' in section 'Service'
  8. Non-resolvable parent POM for com.supermarket:supermarket:0.0.1-SNAPSHOT: Could not transfer artifac
  9. ajax 通过json xml文件,php+Ajax处理xml与json格式数据的方法示例
  10. Go 语言学习总结(7)—— 大厂 Go 编程规范总结
  11. .net remoting的事务传播以及wcf分布式事务
  12. php获取数据3中方式,PHP面向对象之3种数据访问方式详解(代码实例)
  13. Struts标签 bean:write用法
  14. 最全的c#日期函数 winform
  15. eXtremeComponents 分页列表
  16. SOUI知识点小结2
  17. 计算机综述论文能发期刊吗,计算机核心期刊哪些好发
  18. 机器学习系列文章【转自我的新浪博客】
  19. uiautomator xpath筛选父级通框架内子元素调用
  20. (深度学习快速入门)第三章第一节:多层感知器简介

热门文章

  1. fck java_FCkjava三种调用方法
  2. LeetCode:二进制手表【401】
  3. css div设置inline-block后 div顶部对齐
  4. 数据库SQL优化大总结之 百万级数据库优化方案(转载)
  5. Windows phone 应用开发[14]-调用WebBrowser
  6. boost学习之boost::lock_guard源码分析
  7. 深入理解Linux内核链表
  8. 饥荒联机版服务器显示错误,小白求问 搭服务器出现这种情况是怎么回事
  9. MDK530编译出现ARM版本不符问题
  10. 计算机软件需求规格说明规范_太阳能(光伏)组件安全规范测试简介_丙观科技