arrays.sort(._Arrays.hashCode(Object [])与Objects.hash(Object…)

arrays.sort(.

从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

arrays.sort(.

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

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

相关文章

windows系统SSH证书设置

在客户端终端运行命令 ssh-keygen -t rsa 然后就会显示这两行: Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/16627/.ssh/id_rsa): 这是让你输入一个文件名,用于保存刚才生成的 SSH key 代码。为了避免麻烦…

肺功能曲线图怎么看_【家装干货】有人说是鸡肋,有人说是功能升级,卫生间装双人洗漱台,你怎么看?...

家里如果是2人甚至4人以上共同居住,为了使用方便,安装双人洗漱台是值得尝试的,毕竟刷牙、洗脸、饭前洗手,或是梳妆、卸妆都会在这里进行。不过是否能安装,需要对双人洗漱台的尺寸有一定掌握,根据卫生间的大…

Linux命令中的$()和${}的区别

文章目录$()${}$() $() 小括号里面是 Linux 命令,作用就是执行里面的命令后返回执行的结果;和 (反引号)作用一样。 $() 与 (反引号)都是用来作命令替换的。命令替换与变量替换差不多,都是用来…

feign rest_与Feign客户轻松进行REST通信

feign rest在这个例子中,我们将向您展示如何使用Feign客户端开发一个简单的Spring Boot Application,以使用Weather REST服务。 Spring Boot是基于Java的框架,可简化Web和企业应用程序的构建。 Spring Boot具有嵌入式Tomcat,提供…

Properties常用方法

一、概念 java.util.Properties 继承于Hashtable ,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时,System.getProperties 方法就是返回一个Proper…

linux 丢包多少正常_Linux 问题故障定位,看看这篇

转自:Lucien_168https://www.jianshu.com/p/0bbac570fa4c1、背景有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题…

zsh 主题的下载和安装

文章目录agnostergalloisspaceshipPowerlevel10kzsh 主题列表: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes https://github.com/robbyrussell/oh-my-zsh/wiki/themes agnoster agnoster 是比较常用的 zsh 主题之一,但是该主题是依赖于 Powerline…

spock 集成测试_使用Spock 1.2简化对遗留应用程序的集成测试

spock 集成测试了解如何利用Spock 1.2切片传统应用程序的Spring上下文,编写集成测试。 您是否曾经想过,要开始使用一些遗留应用程序,编写一些测试以了解正在发生的事情,并可能收到有关回归的通知? 当您想实例化单个类时…

Stream流的基本使用方法

Stream流的基本使用方法 0.常用方法 在介绍的各种方法中,凡是返回值仍然为Stream接口的为函数拼接方法,它们支持链式调用;而返回值不再为Stream接口的为终结方法,不再支持链式调用。如下表所示: 方法名方法作用方法…

iTerm2主题

iTerm2 最常用的主题是 Solarized Dark theme,下载地址:http://ethanschoonover.com/solarized 下载的是压缩文件,你先解压一下,然后打开 iTerm2,按 Command , 键,打开 Preferences 配置界面,…

包包各部位名称图解_品尝烤肉必备!日本和牛各部位名称中日翻译对照 点餐更轻松...

谈到日本美食,又怎么能少了在全球首屈一指的和牛?但是日本大部分烤肉餐厅里的菜单都是日语,而且肉的部分众多,点餐时一定傻傻分不清,一脸懵逼了!今天小T为大家分享日本和牛肉各部位名称的中日语对照&#x…

Java程序开发三步骤:编写、编译、运行

1.Java语言跨平台原理 1.1Java虚拟机——JVM JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的 运行环境,是Java 最具吸引力的特性之一。我们编写…

corda_Corda服务的异步流调用

corda如何使流程更快? 如果您与Corda合作已有一段时间,那么您很有可能已经考虑过这一点。 您可以通过以下几方面进行合理的调整以提高性能:事务大小,优化查询并减少整个Flow执行过程中所需的网络跃点数。 在某种程度上&#xff0c…

Powerline专用字体安装_PowerFonts字体库安装_Meslo LG字体安装

文章目录单独下载某个 Meslo LG 字体通过命令方式安装全部 Meslo LG 字体zsh 如果使用主题 agnoster,而该主题依赖于 Powerline,而 Powerline 的正常显示有依赖于字体 Meslo LG,要不然会出现乱码的情况,如下所示:单…

delphi7 中文注释字体_使用nerd-font/font-patcher为字体添加字体图标

Nerd-fonts常用来在终端下显示各种图标,这个项目的github repo下提供了许多Nerd Font字体,图标使用效果如图。由于目前Windows Terminal还不支持设置第二字体,要想使用nerd font就必须替换掉原有字体。Nerd font的github页面下提供了许多常见…

Mybatis框架(待完善)

框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。 简而言之&a…

MacOS安装Powerline

文章目录安装卸载查看配置(可以忽略这部分)Powerline 是一款比较酷炫的状态栏工具,可以美化终端和 vim 界面,由 python 开发,目前仅支持 python2.X,由于 python2 和 python3 互不兼容,安装前要了…

充电器用着用着就松了怎么办_手机充电口松动怎么办?

如果手机充不进电,首先要检查充电器是否完好,如果充电器完好才考虑手机充电接口松动的可能性。手机充电口松动时,先换一个充电器试试,好多原装充电器接口挤压或踩压难免变薄,而手机接口长时间充电时抻曳也难免变大&…

jakarta ee_适用于Java EE / Jakarta EE开发人员的Micronaut

jakarta ee城镇中有一个名为Micronaut的新微服务框架。 在本文中,我将从Java EE / Jakarta EE的角度讨论如何冒险使用Micronaut框架。 我是Java EE开发人员,因此使用诸如Eclipse MicroProfile之类的解决方案开发微服务更接近我的专业知识,但是…

mysql(待完善)

下载 https://www.mysql.com/cn/downloads/ 下载步骤 1.MYSQL Comunity(GPL) Downloads 2.MySql Community Server 3.根据自己电脑配置下载 4.直接下载 5.注意安装的密码加密方式 选择 使用旧版密码加密 一定要选择Use Legacy Password Encryption。(备注&#x…