草庐IT

java - 在 HashMap 中使用相同的键存储多个值

今天面试,面试官问我如何在HashMap中存储具有相同键的多个值?她给了我这个例子-->如果给我一个字符串列表,我想将字符串的长度存储为键,将字符串本身存储为值。我给了她以下关于我将如何使用HashMap的解决方案:Map>map=newHashMap>();整数是字符串的长度,ArrayList将存储该特定长度的字符串。面试官说这是使用HashMap的一种方式,但还有另一种方式我不需要ArrayList或任何其他数据结构。在面试期间,我想不出任何解决方案,现在经过足够多的谷歌搜索后,我仍然一无所获。谁能告诉我如何解决这个问题?谢谢! 最佳答案

Java 8 HashMap

我有一张mapMap我想在所有列表中找到最大(或最小)值。该函数应返回最大(或最小)值以及属于该值的键。签名可能是publicstaticPairgetKeyValue(Map>map,BinaryOperatorfunction)获取map和函数Double::max或Double::min我如何使用java8streamapi高效(并且漂亮地)实现它? 最佳答案 ABinaryOperator不是该任务的良好规范,可以直接用于减少以产生适当的值,例如最小值或最大值,但它不适合返回关联值,如Map的关键值(value)。以这种方式

java - 收集可能为空的值

我有以下代码:privatestaticMapgetDifference(finalTa,finalTb,finalMap>fields){returnfields.entrySet().stream().map(e->{finalStringname=e.getKey();finalFunctiongetter=e.getValue();finalObjectpairKey=getter.apply(a);finalObjectpairValue=getter.apply(b);if(Objects.equals(pairKey,pairValue)){returnnull;}els

java - 为什么我的Key中的 '1'位越多,放到HashMap中的时间就越长?

我正在为一个类(class)做一个项目,该类(class)专注于在内存中存储一​​个大部分为0值的巨大矩阵,并对其执行一些矩阵数学运算。我的第一个想法是使用HashMap来存储矩阵元素,并且只存储非零元素,以避免使用大量内存。我想为HashMap创建一个键,它代表元素的行号和列号,当我访问映射中的该条目时,我可以重新提取两个值。我对Java和C#都不了解-在C#中我会制作一个包含Row和Column成员的struct,但在Java中我很快意识到没有用户值类型。随着最后期限的临近,我做了一个安全的赌注,将Key设为长。我使用一些非常简单的位移位将行数据(32位整数)存储在前32位中,将列

java - 创建不可变通用对象的 HashMap

我不认为有一种方法可以有效地(如果有的话)这样做,但我想我会问一下以防其他人知道。我正在寻找创建自己的缓存/查找表。为了让它尽可能有用,我希望它能够存储通用对象。这种方法的问题在于,即使您可以制作Collections.unmodifiableMap,immutableMap,etc,这些实现只会阻止您更改Map本身。它们不会阻止您从map中获取值并修改其基础值。本质上,我需要的是达到HashMap效果的东西,但据我所知,这样的事情不存在。我原本以为我可以在get方法中只返回缓存中值的副本,但由于Java的Cloneable界面被顶起,无法简单调用publicVgetItem(Kkey

java - volatile hashmap 的特征

我正试图牢牢把握一个变量如何声明为privatevolatileHashMap>data;将在多线程环境中运行。我的理解是volatile意味着从主内存而不是从线程缓存中获取。这意味着如果正在更新一个变量,在更新完成之前我不会看到新值并且我不会阻止,而是我看到的是最后更新的值。(顺便说一句,这正是我想要的。)我的问题是何时检索ArrayList并在线程B读取时在线程A中添加或删除字符串,volatile到底影响了什么?关键词?HashMap仅或影响扩展到HashMap的内容(K和V)还有吗?那是线程B获得ArrayList的时候当前正在线程A中修改实际返回的是ArrayList的最后一

java - 如何按类类型创建泛型类型安全的 HashMap?

这个问题在这里已经有了答案:Javamapwithvalueslimitedbykey'stypeparameter(6个答案)关闭8年前。我想创建一个HashMap,将特定的类类型映射到一个特定的新对象。稍后我想传递类类型并获取对该特定对象的引用。简单示例:Map,?>values=newHashMap();publictget(Classtype){returnvalues.get(type);}//petandcardonotshareanyinterfaceorparentclassclassPet;classCar;//error:notapplicableforargume

java - 获取 HashMap 中具有类似 'some value' 的键的键列表

在Mysql中我们可以查询一个有子句“WHEREnameLIKE'%someName%'”的表,我们是否可以在java中拥有与HashMap相同的功能,如果可以,我们如何更有效地实现这一点在更短的时间内不迭代每个元素? 最佳答案 如果您使用的是JavaSE8和新的StreamsAPI:有一个filter我认为这基本上就是您正在寻找的方法。例如类似(未经测试!):myMap.entrySet().stream().filter(entry->entry.getKey().contains("someName")).map(entry-

java - 允许分别提供相等比较器和散列函数的映射

在尝试对多项式建模时,尤其是它们的乘法,我遇到了以下问题。在乘法过程中,两个多项式的各个单项式相乘,当然我可能会得到(3x^2y+5xy^2)*(x+y)。结果包含3x^2y^2和5x^2y^2,我想立即通过加法合并。自然地,我想使用单项式的x^2y^2部分作为(哈希)映射中的键来添加不同的系数(示例中的3和5)。但是我设想的单项式对象自然也应该包含系数,它应该不是映射键的一部分。当然,我可以编写单项式对象的等号/哈希码,以便它们忽略系数。但这感觉非常错误,因为从数学上讲,单项式显然只有在系数也相等的情况下才等于另一个单项式。为中间操作引入无系数的单项式对象看起来也不对。我可以不使用m

java - Java中的大量对象(使用HashMap)

你好,我目前正在使用Java进行单词预测。为此,我使用了基于NGram的模型,但我遇到了一些内存问题...我第一次有这样的模型:publicclassNGramimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privatetransientintcount;privateintid;privateNGramnext;publicNGram(intidP){this.id=idP;}}但它占用大量内存,所以我认为我需要优化,我想,如果我有“hellotheworld”和“hellothepeople”,而不