Arrays.hashCode(Object [])与Objects.hash(Object…)

从JDK 1.5开始 , Arrays类提供了名为“ hashCode ”的重载static方法。 大多数重载方法都接受特定原始类型的数组,但是Arrays.hashCode(Object [])方法可用于计算引用类型数组的int哈希码。 自从JDK 1.7诞生以来 , Objects类提供了一种名为hash(Object…)的方法,该方法还为提供的Java对象数组(表示Java varargs的省略号 [ ... ] 作为数组处理 )返回int哈希码。 接受一个数组 )。 这篇文章提供了Arrays.hashCode(Object)Objects.hash(Object...)之间的简要比较。

我们可以查看OpenJDK中的代码,以了解OpenJDK如何实现此处比较的两种方法。 事实证明, Arrays.hashCode(Object[])Objects.hash(Object...)行为完全相同,因为Objects.hash(Object...)完全委托给Arrays.hashCode(Object[]) 。 这是从OpenJDK Objects.java类提取的下一个代码清单中显示的。

public static int hash(Object... values) {return Arrays.hashCode(values);
}

因此,事实证明这些方法实际上是相同的,因此选择哪种方法主要取决于口味。 鉴于无论如何都会调用Arrays方法,可能会吸引一些人直接使用它。 其他人可能更喜欢在将已知的Java数组构造传递给Arrays方法时使用Objects方法,而在以逗号分隔的组合形式传递值而无需显式数组语法的情况下使用Objects方法(例如(例如,实现自定义类的hashCode()方法并将该类的任意类型的属性传递给哈希代码计算的情况)。 当使用相同类型的原语数组时,最好为该特定原语使用适当版本的Arrays.hashCode

下一个代码清单(可在GitHub上找到)中显示的简单类演示了Arrays.hashCodeObjects.hash(Object...)方法的重载版本之间的输出差异和相似之处。

package dustin.examples.hashcodes;import java.util.Arrays;
import java.util.Objects;import static java.lang.System.out;/*** Demonstration that displays output to standard output with* hash codes generated for the same underlying array data by* both {@code Arrays.hashCode(Object[])} and by* {@code Objects.hash(Object...)}.*/
public class HashesComparedDemo
{public static void main(final String[] arguments){final int[] integers = ArraysCreator.createArrayOfInts();out.println("Arrays.hashCode(Object[]) for int[]: " + Arrays.hashCode(integers));out.println("Objects.hash(Object...) for int[]:   " + Objects.hash(integers));out.println("Objects.hashCode(Object) for int[]:  " + Objects.hashCode(integers));final Integer[] refIntegers = ArraysCreator.createArrayOfIntegers();out.println("Arrays.hashCode(Object[]) for Integer[]: " + Arrays.hashCode(refIntegers));out.println("Objects.hash(Object...) for Integer[]:   " + Objects.hash(refIntegers));out.println("Objects.hashCode(Object) for Integer[]:  " + Objects.hashCode(refIntegers));final String[] strings = ArraysCreator.createArrayOfStrings();out.println("Arrays.hashCode(Object[]) for String[]: " + Arrays.hashCode(strings));out.println("Objects.hash(Object...) for String[]:   " + Objects.hash(strings));out.println("Objects.hashCode(Object) for String[]:  " + Objects.hashCode(strings));}
}

上面显示的代码将三个公共数据集(原始int值数组,参考Integer值数组和String值数组)传递给Arrays.hashCodeObjects.hash(Object...)和Objects.hashCode(Object)方法,该方法接受单个Object (整个数组符合条件)。 然后,简单示例将每种方法为每个数据集生成的各个哈希码值写入标准输出。 接下来显示运行该代码的结果。

Arrays.hashCode(Object[]) for int[]: 1722319241
Objects.hash(Object...) for int[]:   356573628
Objects.hashCode(Object) for int[]:  356573597
Arrays.hashCode(Object[]) for Integer[]: 1722319241
Objects.hash(Object...) for Integer[]:   1722319241
Objects.hashCode(Object) for Integer[]:  1735600054
Arrays.hashCode(Object[]) for String[]: 448603921
Objects.hash(Object...) for String[]:   448603921
Objects.hashCode(Object) for String[]:  21685669

如我们所料, Arrays.hashCode(Object[])Objects.hash(Object...)对于引用类型IntegerString返回相同的计算哈希码,因为它们两者实际上都是Arrays.hashCode(Object[]) 。 原始int值数组从Arrays.hashCode(int[])得出的结果与从Objects.hash(Object...)得出的结果不同,这当然是因为原始数组被传递给重载的Arrays.hashCode(int[])方法专门针对该原始数据类型而不是Arrays.hashCode(Object[])

翻译自: https://www.javacodegeeks.com/2018/09/arrays-hashcodeobject-versus-objects-hashobject.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos移动文件到指定目录_Dynamo批量分离中心文件并另存到指定目录

我们在做项目的时候,为了方便协作,一般都会采用中心文件的方式,但是最终交付的时候,是需要把中心文件分离的,一个一个的分离,感觉还是他麻烦了,于是就想到用Dynamo来批量操作,简单测…

【渝粤题库】广东开放大学 Java高级编程技术 形成性考核

​题目: Java语言中可以作为标识符的有()。 题目: Java中的流程控制语句包括()。 题目:计算机语言的发展经历了非常大的变革,其发展具体包括()。 题目&#x…

轻松监控Docker容器中的ADF应用程序

在这篇简短的文章中,我将展示一种简单的方法,以确保在Docker容器中运行的ADF应用程序在内存利用率方面是健康的Java应用程序。 我将使用标准工具JConsole,它是计算机上JDK安装的一部分。 如果存在问题(例如,内存泄漏&a…

int型 判断奇偶_XSS(Reflected) 反射型跨站攻击

今天我学习一下反射型XSS。1、low级别打开DVWA网站&#xff0c;先切换到low级别&#xff0c;选择XSS&#xff08;Reflected&#xff09;先查看其源代码&#xff1a;<?php header ("X-XSS-Protection: 0"); // Is there any input? if( array_key_exists( "…

【渝粤题库】广东开放大学 会展概论 形成性考核

选择题 题目&#xff1a;中国进出口商品交易会创办于&#xff08; &#xff09;。 题目&#xff1a;会展产业对区域经济发展的推动作用主要是通过&#xff08; &#xff09;&#xff0c;带动整个产业链发展来实现的。 题目&#xff1a;展会结束后&#xff0c;下列不属…

【渝粤题库】广东开放大学 土木工程CAD 形成性考核

选择题 题目&#xff1a;当丢失了下拉菜单&#xff0c;可以用下面哪一个命令重新加载标准菜单&#xff08; &#xff09; 题目&#xff1a;下面的各选项除了&#xff08; &#xff09;&#xff0c;其他都可以绘制圆弧。 题目&#xff1a;在AutoCAD中&#xff0c;设置"夹点…

junit 运行_运行,JUnit! 跑!!!

junit 运行JUnit与JavaScript和SVN一起是程序员经常开始使用的一些技术&#xff0c;甚至没有读过一篇博客文章&#xff0c;更不用说一本书了。 也许这是一件好事&#xff0c;因为它们看起来足够简单并且易于理解&#xff0c;因此我们可以立即使用它们而无需任何手册&#xff0c…

pytorch 查看当前学习率_pytorch实现查看当前学习率

在pytorch训练过程中可以通过下面这一句代码来打印当前学习率print(net.optimizer.state_dict()[param_groups][0][lr])补充知识&#xff1a;Pytorch&#xff1a;代码实现不同层设置不同的学习率&#xff0c;选择性学习某些层参数1&#xff0c;如何动态调整学习率在使用pytorch…

【渝粤题库】广东开放大学 建设监理 形成性考核

选择题 题目&#xff1a;建设工程监理是针对&#xff08;&#xff09;所实施的监督管理。 题目&#xff1a;按照建筑法规定&#xff0c;建设工程监理实施的前提是&#xff08;&#xff09;。 题目&#xff1a;我国政府于&#xff08;&#xff09;宣布在我国实行建设监理制。 题…

将Host Cobol批次和Monolith Webapps移动到云和微服务

在Amazon Event “从大型机到微服务– Vanguard迁移到云”中非常有趣的演示。 以下部分可用作迁移模式 &#xff1a;如何从大型机迁移到微服务的不同方式&#xff1a; 重新托管 再造 重构 使用Linux和Java重新平台 回购 退役 全部结合 该演示文稿还展示了Vanguard的Cloud…

flutterapp部分手机无法打开_Flutter应用程序在最新更新后无法运行

Environment DetailsWindows VS CodeFlutter 1.17.5 • channel stable • https://github.com/flutter/flutter.gitFramework • revision 8af6b2f038 (3 days ago) • 2020-06-30 12:53:55 -0700Engine • revision ee76268252Tools • Dart 2.8.4Error From Debug ConsoleE…

【渝粤题库】广东开放大学 文化市场营销 形成性考核 (2)

选择题 题目&#xff1a; 国际投资中的政治风险防范主要表现在生产和经营战略及( )上。 选择一项&#xff1a; 题目&#xff1a; 国际投资时投资者对东道国投资经济环境首要考虑的经济政策是( ) 选择一项&#xff1a; 题目&#xff1a;用于文化产业生产和经营消费…

【渝粤题库】广东开放大学 物业管理实务 形成性考核 (2)

选择题 题目&#xff1a;房地产属于非货币性资产&#xff0c;其拥有者可以很快将房地产兑换成现金。 题目&#xff1a; 物业经营管理既包括保证物业正常使用的运行操作管理活动&#xff0c;也包括将物业作为一种收益性资产所进行的一系列的经营活动。 题目&#xff1a;政府干预…

android动态添加的页面怎么加功能_Android跳转应用安装页面

一.低版本跳转方式Intent intent new Intent(Intent.ACTION_VIEW);intent.setDataAndType(uri,"application/vnd.android.package-archive");intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivityForResult(intent, 666);uri是apk的uri记得不要忘了在mani…

【渝粤题库】广东开放大学 计算机英语 形成性考核

&#x1f449;关注我,看答案&#x1f448; 选择题 题目&#xff1a;The fourth generation computers, such as microcomputers, appearing in the mid-1970s, were based on(). 题目&#xff1a;The second generation computers, introduced in the early 1960s, were based …

字节数组转为二进制数 c#_如何使用字节序列化双精度数组(二进制增量编码,用于低差单调浮点数据集)...

字节数组转为二进制数 c#低延迟系统需要高性能的消息处理和传递。 由于在大多数情况下&#xff0c;数据必须通过有线传输或序列化才能保持持久性&#xff0c;因此编码和解码消息已成为处理管道的重要组成部分。 高性能数据编码的最佳结果通常涉及应用程序数据细节的知识。 本文…

【渝粤题库】陕西师范大学100091 现代教育技术学 作业(专升本)

的有关程序和文件。 D计算机软件按照其功能和应用范围的不同&#xff0c;可分为系统软件和应用软件两大类。 9、计算机辅助测验系统的结构与功能是&#xff08; &#xff09; A计算机辅助测验系统是计算机管理教学的重要应用领域。 B利用计算机可以大大简化题库的建设、试卷的生…

java用户的登录图片_Java 如何用 token 做用户登录认证

1、什么是 token&#xff1f;&#xff1f;&#xff1f;Token 是服务端生成的一串字符串&#xff0c;以作客户端进行请求的一个令牌。2、token 做用户登录认证● 流程3、 Java 实现● 用户登录生成 token&#xff0c;保存到 Redis 中最简单的 token 可由 uid (用户唯一的身份标识…

【渝粤题库】陕西师范大学151204 中级财务会计作业(笔试题型)

《中级财务会计&#xff08;专升本&#xff09;》作业 一、单项选择 1、应收账款的产生原因是( )。 A、现销 B、赊销 C、现购 D、赊购 2、在物价持续上涨期间&#xff0c;能使企业当期利润最小的存货计价方法是( )。 A、后进先出法 B、先进先出法 C…

【渝粤题库】陕西师范大学152210 现代社会调查理论与方法

陕西师范大学 内 部 题 库 教育 &#xff08;yuyueshool&#xff09; 编制 陕西师范大学 内 部 题 库 教育 &#xff08;yuyueshool&#xff09; 编制 《现代社会调查理论与方法》作业 一、填空题 1.社会调查的作用&#xff0c;从大的方面说&#xff0c;主要体现在描述状况…