ArrayList作为HashMap中的键

2023-12-04

是否可以添加一个ArrayList作为关键HashMap。我想保留二元组的频率计数。二元组是键,值是它的频率。

对于每个像“他是”这样的二元组,我创建了一个ArrayList并将其插入到HashMap。但我没有得到正确的输出。

public HashMap<ArrayList<String>, Integer> getBigramMap(String word1, String word2) {
    HashMap<ArrayList<String>, Integer> hm = new HashMap<ArrayList<String>, Integer>();
    ArrayList<String> arrList1 = new ArrayList<String>();
    arrList1 = getBigram(word1, word2);
    if (hm.get(arrList1) != null) {
        hm.put(arrList1, hm.get(arrList1) + 1);
    } else {
        hm.put(arrList1, 1);
    }
    System.out.println(hm.get(arrList1));
    return hm;
}


public ArrayList<String> getBigram(String word1, String word2) {
    ArrayList<String> arrList2 = new ArrayList<String>();
    arrList2.add(word1);
    arrList2.add(word2);
    return arrList2;
}

是的,你可以拥有ArrayLists 作为哈希映射中的键,但它是非常糟糕的主意因为他们是mutable.

如果您更改ArrayList以任何方式(或其任何元素),映射基本上都会丢失,因为密钥不会具有相同的hashCode就像插入时一样。

经验法则是仅使用不可变数据类型作为哈希映射中的键。正如 Alex Stybaev 所建议的,您可能想要创建一个Bigram像这样的类:

final class Bigram {

    private final String word1, word2;

    public Bigram(String word1, String word2) {
        this.word1 = word1;
        this.word2 = word2;
    }

    public String getWord1() {
        return word1;
    }

    public String getWord2() {
        return word2;
    }

    @Override
    public int hashCode() {
        return word1.hashCode() ^ word2.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        return (obj instanceof Bigram) && ((Bigram) obj).word1.equals(word1)
                                       && ((Bigram) obj).word2.equals(word2);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ArrayList作为HashMap中的键 的相关文章

  • 我可以确定谁在调用 Java 中的函数或实例化类吗? [复制]

    这个问题在这里已经有答案了 可能的重复 在Java中 如何使用堆栈跟踪或反射找到方法的调用者 https stackoverflow com questions 421280 in java how do i find the caller
  • Java 字符串哈希码缓存

    字符串不变性的优点之一是哈希码缓存以实现更快的访问 在这种情况下 如何处理具有相同哈希码的字符串的缓存 在这种情况下它真的能提高性能吗 在这种情况下 如何处理具有相同哈希码的字符串的缓存 被缓存的是字符串的哈希码 它被缓存在私有的int字符
  • Java中RandomAccessFile的并发

    我正在创建一个RandomAccessFile对象通过多个线程写入文件 在 SSD 上 每个线程都尝试在文件中的特定位置写入直接字节缓冲区 并且我确保线程写入的位置不会与另一个线程重叠 file getChannel write buffe
  • 通过 html tidy 提供渲染 jsp 页面

    我有一个在 Glassfish 上运行的 Java 项目 它会呈现一些难看的 HTML 这是使用各种内部和外部 JSP 库的副作用 我想设置某种渲染后过滤器 通过 HTMLTidy 提供最终的 HTML 这样源代码就很好且整洁 有助于调试
  • Spring boot 2.0.5.RELEASE和mongo 4.0连接问题

    我正在关注使用 MongoDB 访问数据教程春季网站 https spring io guides gs accessing data mongodb 我将 Mongo DB 服务器版本 4 安装为服务当我使用客户端连接到它时 它的身份验证
  • Java“空白最终字段可能尚未初始化”方法中抛出异常

    我有一些代码 例如 final int var1 if isSomethingTrue var1 123 else throwErrorMethod int var2 var1 throwErrorMethod 的定义如下 private
  • MediaPlayer.create() 始终返回 null

    我以前用过媒体播放器 从来没有遇到过这个问题 每当我尝试使用 MediaPlayer create 时 该方法都会给我 null 并且我无法播放声音 我有什么遗漏的吗 public class Game extends Activity p
  • 如何导入 Java 密钥库中现有的 X.509 证书和私钥以在 SSL 中使用?

    我在 ActiveMQ 配置中有这个
  • Java 中的 MP4 容器编写器

    我想找到一个免费的 Java MP4 容器 编写器 我不需要编码器 只需要能够根据预期值写入正确原子的编码器 Bonus对于这样一个库 也可以编写 有效 F4V 我更喜欢纯 Java 解决方案 而不是使用 JNI 或外部可执行文件的解决方案
  • 为什么下面代码的输出是Thread[main,5,main]

    public class test1 public static void main String args TODO Auto generated method stub Thread t Thread currentThread Sys
  • selenium webdriver 中的多个程序执行不起作用

    Selenium WebDriver 中的多个程序执行不起作用 我编写了 1 个 testNG xml 文件和 2 个 java 类 我尝试从 xml 文件运行这两个 java 类 但这不起作用 XML代码
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • java中日期转换dd-MMM-yyyy到dd-MM-yyyy

    在Java中将23 Mar 2011转换为23 03 2011的最简单方法是什么 感谢大家 这似乎解决了这个问题 try Calendar cal Calendar getInstance cal setTime new SimpleDat
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • while 之后无法访问的语句[重复]

    这个问题在这里已经有答案了 我只是修改代码 在以下代码中出现错误 int x 1 System out println x x while true x System out println x x 错误在最后一行 我可以知道错误 错误 无
  • Spring Transactional 减慢了整个过程

    我正在尝试分析我有两堂课的情况 其中一个类是 ProcessImpl 它是起点并在内部调用其他子事务 我不知道出了什么问题 processImpl正在导入一些东西并将相关数据写入数据库 Specs Spring orm版本 3 2 18 发
  • Lucene/Hibernate 搜索锁定异常

    我使用 Hibernate Search 在 Web 应用程序上索引和全文搜索项目 没有问题 来自我的 pom xml
  • 使用正则表达式匹配阿拉伯文文本

    我试图使用正则表达式仅匹配阿拉伯语文本 但出现异常 这是我的代码 txt matches P Arabic 这是例外情况 线程 main 中的异常 java util regex PatternSyntaxException 索引 9 附近
  • 如何创建具有同等时间元素的 JavaFX 转换?

    我正在尝试 JavaFX 和动画 尤其是PathTransition 我正在创建一个简单的程序 使球 弹跳 而不使用QuadCurveTo班级 到目前为止 这是我的代码 Ellipse ball new Ellipse 375 250 10
  • 在没有EOF的情况下停止读取java中的输入

    In 问题 如何停止读取输入 我的程序继续运行 要求更多输入 public static void main String args throws Exception BufferedReader br new BufferedReader

随机推荐

  • PDFbox 说 PDDocument 已关闭,但未关闭

    我正在尝试使用 PDFbox 填充重复的表单 我正在使用 TreeMap 并用单独的记录填充表单 pdf 表单的格式是这样的 第一页列出六条记录 第二页插入一个静态页面 对于大于 6 个记录的 TreeMap 重复该过程 我得到的错误特定于
  • 在反引号中使用管道

    我尝试使用管道运行命令但收到错误 echo abc echo grep a grep b grep No such file or directory grep grep No such file or directory grep b N
  • 从sqlite数据库读取信息,语法?如何在 html5 webapp 中使用它?

    我正在构建一个 Web 应用程序 并且刚刚开始使用 SQLite 我已经能够创建我的表单 打开我创建的数据库 创建表和我需要的字段 然后将数据输入到字段中 现在 我尝试使用 SELECT 语句读回数据 将其显示在屏幕上并作为列列表 我只是不
  • 我的 Android 应用程序在调试中显示谷歌地图,但在发布到市场时不显示

    我创建了一个使用 Google 地图和 Google Playstore 的应用程序 并使用 Eclipse 和 Android SDK 进行调试 地图显示在我正在运行的设备上 但发 布时它不会显示在应用程序上 只有一个大的灰色屏幕 And
  • 将 IPTC 数据写入文件

    我需要获取一个现有的 jpg 文件并修改其 IPTC 条目中的标题 描述和关键字 这里有几个与此相关的主题 但所有主题要么没有答案 要么只有部分答案 我已经知道如何阅读 IPTC 信息 但需要编辑它们 有人可以阐明这个经过大量研究且鲜为人知
  • 用Scheme语言计算浮点变量

    我想在 Ansys Fluent 中读取多个数据文件 总共 10 个 我写了一个使用方案语言的日志文件 Do count 11 100 count 0 100 gt count 12 000 ti menu load string form
  • 在脚本中创建 sudo 用户,不提示输入密码,更改为用户而不中断脚本

    这就是我试图在脚本中做的事情 它在这里手动工作 但提示我输入密码 我如何能 创建一个新用户 使用 sudo privs 切换到该用户 继续执行脚本的其余部分 sudo adduser centos sudo passwd centos us
  • 新线程,应用程序在阶段关闭后仍在运行

    所以我遵循了这个教程 https www youtube com watch v gyyj57O0FVI 我在 javafx8 中编写了完全相同的代码 public class CountdownController implements
  • 如何睡眠直到特定时间 YYYY-MM-DD HH:MM:SS?

    我一直在考虑做一个睡眠函数 让它休眠直到调用某个日期 我的想法是基于日期 例如 2019 01 20 12 00 00 我还没有真正弄清楚如何开始解决这个问题 我的想法是类似的东西 if there is a date given time
  • 如何在 Android 中播放 YouTube 视频?

    我有一个VideoView我设置了 youtube 视频的 URI 并设置android permission INTERNET但当我想播放视频时收到此消息 你无法播放视频 这个视频播放器的代码片段 mVideoView VideoView
  • ASP.NET 的调度程序?

    我想每天晚上在某种任务或调度程序中运行一些应用程序代码 框架中有内置功能吗 如果没有 有什么简单的第三方框架来进行调度 Thanks 您可以创建控制台应用程序并将其作为计划任务运行 或者 您可以考虑使用 Quartz Net 它是 Java
  • Register-ObjectEvent cmdlet 在 Powershell 上无法正常工作,但在 ISE 上工作

    我正在开发一个 Powershell 脚本来监视文件夹 当创建新项目时 脚本需要将该文件复制到另一个文件夹 我遇到的问题是 当我在 Powershell ISE 中执行它时 它工作得很好 但是当我在 Powershell 上执行它时 它仅在
  • 从 Android 将图片发布到墙上

    我想将图片张贴到墙上 就像我在 Facebook 网页上所做的那样 我尝试过这两种方式 但都不是我想要的 http facebook stackoverflow com questions 5168145 android post pict
  • 确定主屏幕的应用程序小部件空间网格大小

    我为平板电脑开发了一个可调整大小的应用程序小部件 该应用程序小部件在大多数带有大多数启动器的设备上运行良好 但是方向存在一些问题 尤其是在纵向模式下的 GO HD 启动器上 应用程序小部件的高度太大 看起来不太好 为了解决这个问题 我创建了
  • Git 著名的“错误:用户对 .git 的权限被拒绝”

    我尝试过谷歌搜索并通读https help github com en articles connecting to github with ssh以及各种不同的指南 我无法git push u origin master or git p
  • Flash 策略文件不起作用(相同域,不同端口)

    我不知所措 我不明白为什么 Flash 没有正确加载我的策略文件 我正在通过 Flash 调试器对此进行测试 I ve also tried from http 127 0 0 1 80 game it sends a request to
  • 如何在 Java 中打印添加换行符的字符串?

    我有一个像这样的字符串 I am a boy 我想这样打印 I am a boy 有谁能够帮助我 System out println I nam na nboy System out println I am a boy replaceA
  • 安全沙箱违规,无法通过套接字连接到服务器

    在开始之前我应该 声明我已阅读全部内容 我正在关注this this and this 还有更多 但我仍然无法通过互联网上的套接字连接到我们正在运行的服务器 这是我在 AS3 中尝试的 var host String 192 168 2 1
  • 什么时候应该抛出 IllegalArgumentException?

    我担心这是一个运行时异常 因此应该谨慎使用它 标准用例 void setPercentage int pct if pct lt 0 pct gt 100 throw new IllegalArgumentException bad per
  • ArrayList作为HashMap中的键

    是否可以添加一个ArrayList作为关键HashMap 我想保留二元组的频率计数 二元组是键 值是它的频率 对于每个像 他是 这样的二元组 我创建了一个ArrayList并将其插入到HashMap 但我没有得到正确的输出 public H