首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java hashcode作用yield返回值_对象的hashcode是什么

    总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。 前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。 那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢? 这就是Object.equals方法了。但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。 也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大降低效率。 于是,Java采用了哈希表的原理。哈希(Hash)实际上是个人名,由于他提出一哈希算法的概念,所以就以他的名字命名了。 哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。如果详细讲解哈希算法,那需要更多的文章篇幅,我在这里就不介绍了。 初学者可以这样理解,hashCode方法实际上返回的就是对象存储的物理地址(实际可能并不是)。 这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。 如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了, 就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。 所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。 所以,Java对于eqauls方法和hashCode方法是这样规定的: 1、如果两个对象相同,那么它们的hashCode值一定要相同;2、如果两个对象的hashCode相同,它们并不一定相同 上面说的对象相同指的是用eqauls方法比较。 你当然可以不按要求去做了,但你会发现,相同的对象可以出现在Set集合中。同时,增加新元素的效率会大大下降。hashcode这个方法是用来鉴定2个对象是否相等的。 那你会说,不是还有equals这个方法吗? 不错,这2个方法都是用来判断2个对象是否相等的。但是他们是有区别的。 一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等 了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。举个例子,有个学生类,属性只有姓名和性别,那么我们可以 认为只要姓名和性别相等,那么就说这2个对象是相等的。 hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode 这个方法,而且也用到了equals方法。这里不可以重复是说equals和hashcode只要有一个不等就可以了!所以简单来讲,hashcode相 当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比较起来不直观。我们一般在覆盖equals的同时也要 覆盖hashcode,让他们的逻辑一致。举个例子,还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名 的hashcode值加上性别的hashcode值,这样从逻辑上,他们就一致了。 要从物理上判断2个对象是否相等,用==就可以了。

    05

    Java实现随机人名抽取

    - 使用数组、方法、循环等实现人名的随机抽取 ## 前言:         我们今天来写一个随机抽取用户名字的一个小程序,     首先我们思考这个需求他需要的条件,要抽取用户的名     字,就要先有一个容器,来储存用户名字的数据,其次     要有随机的功能实现,因为要随机,所以还要有一个寻     找的功能,挨个寻找的功能需要循环来实现,再想一下     有寻找,找到了还继续往后找嘛?当然肯定不找了,找     到了还继续运行程序,只会浪费内存,这里就要用到break;     中止语句,最后再打印输出。 ###### 1.要有一个储存用因为户数据的一个数据库         因为有些小伙伴刚入们没学过数据库,所以这里就     使用动态数组来代替数据库,实现数据库储存数据,查     找数据,打印数据的功能。 ###### 2.实现随机的功能         这里实现随机的功能可以使用Math方法语句来实现     因为这是JDK里提前定义好的方法,可以直接拿来用,     直接新建new一个新的方法,通过名字.的方式来调用     Math可以随机给出一个数,范围是(0.1-1.0) ###### 3.使用break;语句         使用break;语句可以直接中止此次循环,在这个数     寻找到后,直接中止程序,就不再往下继续寻找寻找,从     而达到节约时间,提升运行速度,节约内存的作用。 ###### 4.if、else与length         一个if与else的嵌套,确定随机生成的数字是否大于     1,若小于1则直接终止程序,length函数,表示数组的长     度,与数组巧妙的使用。 ###### 5.使用循环语句         使用while函数,直接对生成的数字进行判断。 ### 代码如下: ``` public class DiceGame {    public static void main(String[] args) {       String[] name = {"张三", "李四", "王五",};//定义人名       int num = (int) (Math.random() * 3);//通过Math实现随机       while (num > name.length - 1) {//对生成的随机数进行判断          if (num <= name.length - 1) {             break;          }          num = (int) (Math.random() * 3);       } //将数组下标设置成随机数,就可以实现人名的随机抽取       System.out.println("被抽取的人是" + name[num]);    } } ``` - 代码仅供参考

    01

    看美剧英文字幕学英语的利器——“深蓝英文字幕助手”简介

    我从初中开始基本上就是一个英语很烂的人,数理化再好有什么用,工作了,结果发现数理化都没啥用,最有用的还是当年学的最烂的英语。于是在2011年年底开始了学习英语的课程,在学习的过程中,外教经常会放英剧美剧给我们看,看了以后回答问题,讲解,挺有意思的。印象最深刻的就是Neil给我的Doctor Who还有另外一个外教放的Friends。后来在课程快结束的时候,萌发了一个想法,能不能只看英文字幕来看美剧(当然还有英剧),这样没有中文字幕的话才能在看美剧的过程中联系阅读与听力。但是美剧中很多词汇不懂,一旦句子中出现了两个不懂的词汇,那么这句话基本上就不懂是啥意思了。那么我能不能根据我的实际词汇量,对字幕就行修改,如果是认识的单词,那么就不管,如果是不认识的单词,那么就给出其中文意思,这样能够便于理解整个句子,而且在潜移默化中慢慢的提高词汇量。

    02

    java RMI学习笔记RMI(Remote Method)Java RMI 威力强大Java远程消息交换协议JRMP使用RMI优点RMI网络模型网络模型RMI的工作原理RMI远程调用步骤:编码实现j

    RMI(Remote Method) Invocation):远程方法调用,即在RPC的基础上有向前迈进了一步,提供分布式对象间的通讯。允许运行在一个java虚拟机的对象调用运行在另一个java虚拟机上对象的方法。这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。 Java RMI 威力强大 Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。

    05

    开发 | 还在费心学编程?微软用深度学习 AI 帮你写代码

    在过去的几十年中,无论在硬件组织还是软件架构上,计算机行业已经发生了翻天覆地的变化,各种软硬件产品的性能和用户体验均得到了显著提升。 但对程序员而言,软件编码的本质似乎并没有什么本质的改变:无论哪种编程语言,仍然需要程序员根据算法逻辑和实现步骤一步一步地手动敲入代码。虽然近几年随着编码工具的改进和编程语言的版本更新,对于程序员而言,这一过程已经相当方便了,但学习如何编程仍然是诸多计算机用户不得不面对的一道难题。 AI科技评论消息,近日,微软在论文中公布了一项最新的代码合成系统:RobustFill。它基

    09
    领券