【问题标题】:Storing multiple values with same key in HashMap在HashMap中存储具有相同键的多个值
【发布时间】:2014-08-18 03:58:10
【问题描述】:

我今天面试,面试官问我如何在 HashMap 中存储多个具有相同键的值? 她给了我这个例子-->如果给我一个字符串列表,我想将字符串的长度存储为键,将字符串本身存储为值。

我给了她以下关于我将如何使用 HashMap 的解决方案:

Map<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>();

整数是字符串的长度,ArrayList 将存储该特定长度的字符串。

面试官说这是使用 HashMap 的一种方式,但还有另一种方式我不需要 ArrayList 或任何其他数据结构。在面试时,我想不出任何解决方案,现在经过足够的谷歌搜索,我仍然一无所获。谁能告诉我如何解决这个问题?

谢谢!

【问题讨论】:

  • HashMap 根据定义,每个键都有一个值...不太清楚面试官的意思。
  • @user3580294:这就是我告诉她的......但她告诉我,对此有一个非常基本的概念性答案......
  • 你可以使用什么?她是在谈论 hashmap 数据结构的概念吗?
  • @Amir:只是一个简单的 HashMap..
  • 好吧,考虑到Map javadoc 说“一个映射不能包含重复的键;每个键最多可以映射到一个值。”,我认为面试官是他/她的摇杆。编辑:或者也许只是在寻找一个无用的解决方案

标签: java hashmap


【解决方案1】:

可能是面试官想检查您是否知道第 3 方 API。 有多个 API 可用于执行此操作。 其中一些可以在 http://java.dzone.com/articles/hashmap-%E2%80%93-single-key-and

【讨论】:

  • 面试官说不需要任何其他数据结构,暗示没有3rd party apis
【解决方案2】:

不使用任何数据结构的一种方法是连接值中的所有字符串。

例如

map.put(2,"rr*tt*yy");
map.put(3,"nnn*ggg*sss");
map.put(4,"ffff*dddd*jjjj");

【讨论】:

  • 嗯,这是一个有趣的想法。在现实世界中绝对没用,但肯定有可能......
  • 嗯嗯嗯嗯......我想她的问题可能有答案......谢谢你的回答队友:)
  • +1 有趣。这可能是面试官想要的。虽然我会说它仍然算作一种数据结构,只是没有记录并且没有使用语言自己的工具:它本质上是使用分隔符或已知元素长度实现 ArrayList 样式的列表。 (您不需要子字符串之间的“*”,因为它们的长度可以从键中得知。如果使用分隔符,则需要使用转义技术。)
  • 我不会说它在现实世界中没有用:固定长度的记录在一些旧软件中很常见。某些 SQL 驱动程序的结果集缓冲区以这种方式工作:CHAR 列的多行数据只是打包到一个大 char 数组中,每个字符串都是该列的最大长度的长度。
  • 虽然我想强调的是,我认为这些都算作数据结构,提问者的困惑是完全可以理解的,恕我直言,技术上是正确的。如果面试官问的是“没有任何其他”,那就更有意义了。
【解决方案3】:

一个选项是每次你想在地图中插入一条记录时,获取字符串的长度,然后加盐,然后加密字符串的大小以用作密钥。 BAM:对于每个字符串,您都有一个(相当)唯一的可检索键,而不必使用字符串连接。

只要确保使用可逆加密算法即可。

另一种选择是生成一个 UUID 并将字符串的大小连接到该 UUID。

UUID uuid = UUID.randomUUID()
String key = stringSize + "," + uuid;

这也将产生一个唯一值,您可以稍后使用 String.split() 检索该值;

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多