Java 中的顺序无关哈希

2024-02-12

我想用Java计算一组字符串的哈希值。是的,我可以对字符串进行排序并计算 MD5哈希迭代使用digest.update。 但我宁愿省略排序并使用类似的东西combineUnordered https://github.com/google/guava/wiki/HashingExplained https://github.com/google/guava/wiki/HashingExplained有很多类似的问题提出相同的问题,例如与顺序无关的哈希算法 https://stackoverflow.com/questions/30734848/order-independant-hash-algorithm但他们都没有提供一个简单的示例来展示如何在 Java 中迭代计算顺序无关的哈希值。


只需对每个散列进行异或,顺序就无关紧要,而且散列大小将是固定的,而不是随着集合的大小而增长。

使用内置 java 字符串哈希码的哈希码:

int hashcode = strings.stream()
        .mapToInt(Object::hashCode)
        .reduce(0, (left, right) -> left ^ right);

使用番石榴和 MD5 的哈希码就像所问的问题一样:

Optional<byte[]> hash = strings.stream()
        .map(s -> Hashing.md5().hashString(s, Charset.defaultCharset()))
        .map(HashCode::asBytes)
        .reduce((left, right) -> xor(left, right));


static byte[] xor(byte[] left, byte[] right) {
    if(left.length != right.length) {
        throw new IllegalArgumentException();
    }
    byte[] result = new byte[left.length];
    for(int i=0; i < result.length; i++) {
        result[i] = (byte) (left[i] ^ right[i]);
    }
    return result;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的顺序无关哈希 的相关文章

随机推荐

  • ListView LayoutTemplate 在为空时不显示 asp.net

    我有一个
  • 如何在 ReactJs 中调用另一个类的函数

    我有两个课程 俱乐部 俱乐部和主要应用程序课程 在俱乐部课程中 我收到一份俱乐部列表 并将它们显示在 ul 列表 在里面club类我正在尝试从俱乐部列表中获取单击项目的详细信息 关键是我不知道如何调用中存在的详细函数club类在clubs
  • 将自然语言问题转换为 SQL 查询 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想使用 opennlp Java 库将自然语言问题转换为 SQL 查询 即 谁赢得了索契女子花样滑冰比赛的冠军 应转换为 selec
  • 为什么使用 IDENTITY_INSERT 的 EF 插入不起作用?

    这是查询 using var db new AppDbContext var item new IdentityItem Id 418 Name Abrahadabra db IdentityItems Add item db Databa
  • 如何在Windows Phone 8中设置背景图片?

    我很新WP应用程序 不知道如何设置back ground图像在app xaml整个申请文件在Windows Phone 8应用程序 到目前为止 我已经放置了一些controls超过它但无法设置背景图像 我看过一些材料 但没有用 任何帮助将不
  • 终止另一个应用程序的运行 - Cocoa

    如何终止在酷卡中运行的另一个应用程序 假设我正在运行 iTunes 并且我在应用程序中输入 quit 它将退出 iTunes iTunes 只是一个例子 它可以是用户想要的任何东西 我可以从我的应用程序中打开任何应用程序 但我想知道如何关闭
  • 查找不包含所选字符串的文件

    我正在尝试查找不包含选定字符串的所有文件 查找包含的文件很容易 gci select string something 但我不知道如何否定这个说法 您可以使用Where Object gci Where Object Select Stri
  • 如何 Mockk Kotlin 顶级函数?

    Mockk https mockk io允许模拟静态函数 但是如何模拟 Kotlin 顶级函数呢 例如 如果我有一个名为HelloWorld kt 我如何嘲笑sayHello 功能 HelloWorld kt fun sayHello He
  • 为什么更新 VSCode 后出现此错误?无法读取...的源映射(Node.js)

    我的程序在更新之前可以运行视觉工作室代码 更新后 为什么会出现这个错误 Could not read source map for file c Users s aytan Desktop node new Dashboard2 node
  • AngularJS 子目录路由不起作用,应用了 标签

    我有一个非常简单的 AngularJS 模板 我正在尝试让路由正常工作 但是当我加载页面时 我只看到我的 H1 标签index html 我的应用程序位于子目录中 angular route 并且我知道部分存在 我可以访问 angular
  • Ravendb 计数查询

    我需要获取特定集合中的文档计数 现有索引 Raven DocumentCollections 存储与属于该集合的实际文档配对的集合的计数和名称 如果可能的话 我想从这个索引中获取计数 这是 Raven Document Collection
  • 动态设置水晶报表仍然要求数据库登录

    我正在尝试部署Crystal Reports in my MVC应用 为了充分利用 Crystal Report Viewer 我必须使用webform 它在我的开发环境中运行得相当好 该应用程序将部署在用户的服务器上并连接到他们的个人数据
  • 为什么“break”在结束“循环”时不需要分号?

    摘自第3 5章 https doc rust lang org book ch03 05 control flow html returning values from loops 生锈之书 的内容 我们使用break带有值的关键字coun
  • 仅选择数字列进行替换

    我有一个数据框 其中包含一些数字列 一些整数列和一些因子列 我正在尝试将数据框转换为仅对数字列进行平方 但解决方案这个线程 https stackoverflow com questions 5863097 selecting only n
  • 本机应用程序和 chrome 扩展之间的连接在一段时间后中断

    我正在使用 chrome 本机消息传递 api 在我的 chrome extension 和用 c 编写的 native windows app 之间进行通信 连接建立良好 数据也得到交换 但是 在从扩展程序对本机应用程序进行随机数量的调用
  • 有没有一个工具可以删除Python中不使用的函数?

    我有以下情况 我正在开发几个使用我编写的库模块的项目 库模块包含多个类和函数 在每个项目中 都会使用库代码的某些子集 但是 当我为其他用户发布项目时 我只想泄露该项目使用的代码而不是整个模块 这意味着对于给定的项目 我希望从库代码中删除未使
  • 重新加载数据表时双重ajax调用

    我有一个像这样初始化的数据表 var initTable function datatablesresults tr not first on click function var dateandtime this find nth chi
  • df[x]、df[[x]]、df['x']、df[['x']] 和 df.x 之间的区别

    努力理解标题中 5 个示例之间的区别 系列与数据框之间有一些用例吗 什么时候应该使用其中一种而不是另一种 哪些是等价的 df x 使用变量索引列x 退货pd Series df x 使用变量对单列 DataFrame 进行索引 切片x 退货
  • 如何在mysql中左连接多个一对多表?

    我在连接 mysql 中的三个表时遇到问题 假设我们有一个名为posts我将我的条目保存在其中 我有一个名为likes我将 user id 和 post id 存储在其中 第三个表名为comments我在其中存储 user id 和 pos
  • Java 中的顺序无关哈希

    我想用Java计算一组字符串的哈希值 是的 我可以对字符串进行排序并计算 MD5哈希迭代使用digest update 但我宁愿省略排序并使用类似的东西combineUnordered https github com google gua