我今天面试了,我的面试官问我如何在HashMap中存储具有相同键的多个值?她给了我这个例子——
我在如何使用HashMap时给了她以下解决方案:
Map<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>();
整数是字符串的长度,ArrayList将存储该特定长度的字符串。
面试官说这是使用HashMap的一种方式,但还有另一种方式我不需要ArrayList或任何其他数据结构。在面试期间,我无法想出任何解决方案,现在在谷歌搜索了足够多之后,我仍然一无所获。有人能告诉我如何解决这个问题吗?
谢谢!
一个选项是,每次您想将记录插入到映射中时,获取字符串的长度,然后对字符串的大小进行加密以用作密钥。BAM:每个String都有一个(相当)唯一的可检索键,而无需使用String连接。
只要确保使用可逆加密算法。
另一种选择是生成UUID并将字符串的大小连接到该UUID。
UUID uuid = UUID.randomUUID()
String key = stringSize + "," + uuid;
这也将产生一个唯一值,您可以稍后使用String.split()检索该值;
可能是面试官想要检查您是否知道第三方API。有多个 API 可用于执行此操作。其中一些可以在 http://java.dzone.com/articles/hashmap---单键-和
一种不使用任何数据结构的方法是在值中连接所有字符串。
例如:。
map.put(2,"rr*tt*yy");
map.put(3,"nnn*ggg*sss");
map.put(4,"ffff*dddd*jjjj");
问题内容: 我想在Java中实现具有多个值的哈希表,即 并且将返回2倍的值。 我怎样才能做到这一点? 问题答案: 您可以改用Multimap。它在列表中为一个键保留多个值。在commons- collection 和Guava中有实现。 这类似于使用值是列表的Hashmap,但是不必显式创建列表。 自己动手做的同一示例如下所示: 请注意,您可以将Multimap用作构建器,并对其调用asMap以返
为什么它不打印“processTextPosition:ContainsKey”?
问题内容: 我有以下代码来获取地图: 如何打印带有重复键的消息“重复键”? 问题答案: 如何打印带有重复键的消息“重复键”? 使用当前代码,您将收到消息“重复键”,其中包含至少2个实例的列表,这些实例具有与对象相同的值,例如。 如何获得对应的密钥? 到目前为止,还无法获得相应的键,当前从合并功能中获得的实际上是与相同键映射的2个值,这些值需要合并以仅保留对应键的一个值。 您的问题是 Java 9
问题内容: 我在这里面临一个简单的问题。我有两个要读取的属性文件,以创建两个数据源。但是这些属性文件具有完全相同的键!我可以使用以下方式读取两个文件: 但是,然后我无法访问正确的值: 如何读取属性,以便可以使用诸如之类的变量并知道调用哪个变量? 感谢您的帮助! 问题答案: 尝试这样的事情(未经测试):
问题内容: 这是我在采访中遇到的一个问题。 我有两个字符串定义为 我的问题是这两个引用是否指向相同的内存位置。通常,当我们创建相同的字符串(不带new关键字)时,内容是否仅在内存中存储一次,并且具有相同内容的所有String对象仅引用同一位置,而没有多余地存储字符串“ Java”?s1和s2的哈希码相同。但是哈希码是否直接取决于对象的内存位置? 问题答案: 合并相同字符串的过程称为“ inte
问题内容: 我们是否可以用一个键和两个值实现HashMap。就像HashMap一样? 还请告诉我(如果没有办法)通过其他任何方法来实现三个值的存储(以一个为键)的方法,对我有帮助吗? 问题答案: 你可以: 使用具有列表作为值的地图。 创建一个新的包装器类,并将该包装器的实例放置在地图中。。 使用类似类的元组(节省创建许多包装器)。。 并排使用多个地图。 例子 1.使用列表作为值进行映射 这种方法的