草庐IT

面试必问的HashCode技术内幕

全部标签

面试官告诉你新教师招聘面试着装要求

着装非常重要,面试官很注重第一印象。着装不注意,分分钟面试以失败而告终。去年我有幸做了新教师招聘面试的面试官。下面我结合自己做教师招聘面试官的经验,跟大家谈谈如何着装。其实我们面试官,还是很看重着装的,因为一个人来面试,连个着装都不注意,那么我们面试就会认为他不尊重自己也不尊重面试官,这个就会给面试官留下不好的印象,这样想拿高分就很难了。面试过程中,如果大家都注意着装,那么问题就不大,如果只有你自己不注意着装,那么你面试失败的几率就高。面试最好都是穿正装,正装看起来严肃正式,非常符合老师的身份。去年我做面试官的时候,大部分考生都是穿正装,但也会有部分考生不穿正装的,这给我留下非常不好的印象。在

java - 所有实例都相等的类的 HashCode 实现

假设我有一个所有实例都被视为相等的类。一个典型的用例是没有任何状态但仅作为函数运行的类。publicclassToStringFunctionimplementsFunction{@OverridepublicStringapply(Objecto){returno.toString();}@Overridepublicbooleanequals(Objecto){returnoinstanceofToStringFunction;}}现在,应该如何实现hashCode方法?自然地,它需要是一个常量值才能遵守equals/hashCode契约。但是那应该是什么值呢?如果使用了一些微不足

java - 为什么Collection接口(interface)有equals()和hashCode()?

为什么Collection接口(interface)有equals(Objecto)和hashCode(),假设任何实现都默认有那些(继承自Object)? 最佳答案 来自CollectionJavaDoc:WhiletheCollectioninterfaceaddsnostipulationstothegeneralcontractfortheObject.equals,programmerswhoimplementtheCollectioninterface"directly"(inotherwords,createaclas

java - 针对特定情况覆盖 Java 中的 hashCode

我知道在使用hashCode和equals时还有其他关于一般最佳实践的问题,但我有一个非常具体的问题。我有一个类,它的实例变量是同一类的数组。更明确地说,这是代码:ClassNode{Nodearr[]=newNode[5];}我需要为Node类重写hashCode,数组是判断两个Node是否相同的重要决定因素。如何有效地将数组合并到hashCode的计算中?--编辑--我正在尝试检查这两个节点是否相同,这意味着它们具有相同数量的子节点,并且这些子节点导致完全相同的状态。因此,我实际上是在尝试比较两个节点的子树。我想知道我是否可以使用哈希来进行这种相等性检查。我想我实际上需要散列整个子

java - 为什么在 Enum hashCode() 中引用 Object hashCode() 实现,而不是 ordinal() 函数?

这个问题在这里已经有了答案:WhatisthereasonbehindEnum.hashCode()?(7个答案)关闭9年前。我一直认为enumhashCode指的是Java中的ordinal,因为ordinal似乎是hashCode的完美候选者,但事实证明enumhashCode实际上是指默认的hashCode对象实现。我明白,这与JLS并不矛盾,但这仍然让我感到惊讶,我想不出为什么要这样做。虽然我猜想JVM可能会以某种方式依赖它来提供独特的保证,但这对64位JVM来说不再适用。我已经检查了JDK1.6和最新的JDK7,两者的方式相同。有谁知道为什么会这样吗?使用ordinal作为h

java - String.hashCode() 效率低下吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion查看sourcecodeofjava.lang.Stringofopenjdk-1.6时,我看到String.hashCode()使用31作为质数并计算s[0]*31^(n-1)+s[1]*31^(n-2)+...+s[n-1]现在我看这个的原因是我想到的问题是比较String.equals中的hashCodes是否会使String.equals明显更快。但是现在看hashCode,我想到

java - 我应该重写 Collections 的 hashCode() 吗?

假设我有一些包含各种字段的类:classMyClass{privateStrings;privateMySecondClassc;privateCollectioncoll;//...@OverridepublicinthashCode(){//????}}其中,我确实有各种我想存储在HashMap中的对象。为此,我需要拥有MyClass的hashCode()。我必须递归进入所有字段和各自的父类,以确保它们都正确实现了hashCode(),否则MyClass的hashCode()可能不会考虑某些值。这样对吗?我如何处理该集合?我可以一直依赖它的hashCode()方法吗?它会考虑我的s

java - guava-libraries : Is Objects. hashCode(Object[]) 碰撞安全吗?

在查看覆盖hashCode()的不同选项时,我被定向到GoogleGuava库中的Objects.hashCode(Object[])(javadoc).javadoc声明它委托(delegate)给Arrays.hashCode(Object[])。在许多不同的对象类型中使用此方法是否安全?这是否容易发生哈希冲突,或者这不太可能仅仅是因为容器通常只包含一种类型的对象?作为一个简单的例子,考虑以下类,publicclassStudent{privatefinalStringname;publicStudent(Stringname){this.name=name;}@Overridep

java - 如果我的类在 Java 中实现了可比性,我是否需要 equals 和 Hashcode 方法?

我在canStringBufferobjectsbekeysinTreeSetinJava?上找到了这条评论“Java中的map使用了2种识别策略(或多或少)。散列:将输入“Foo”转换为尽可能最好的尝试,以生成一个唯一访问数组索引的数字。(纯粹主义者,请不要辱骂我,我是故意简化的)。该索引是存储您的值的位置。“Foo”和“Bar”实际上可能生成相同的索引值,这意味着它们都将映射到相同的数组位置。显然这是行不通的,所以这就是“equals()”方法的用武之地;它用于消除歧义比较:通过使用比较方法,您不需要这个额外的消歧步骤,因为比较从一开始就不会产生这种冲突。“Foo”等于的唯一键是“

java - 我应该使用哪种 Java RMI/RPC/IPC 技术?

我正在开发一个Java应用程序,它由一个服务器和一个客户端(将来可能有多个客户端)组成,它们可以在不同的主机上运行。对于这两者之间的通信,我目前使用自定义协议(protocol),该协议(protocol)由通过网络套接字发送并在两端转换回JavaBean对象的JSON消息组成。然而,应用程序变得越复杂,我发现这种方法不符合我的标准,而且太复杂了。我正在寻找一个完善的、可能是标准化的替代方案。我看过远程方法调用(RMI),但读到该协议(protocol)很慢(网络开销大)。我正在寻找的技术应该是轻量级的(协议(protocol)和库明智的)、健壮的、可能支持压缩(如果支持的话,还有很大