2

我使用 hashmap 来存储数据。问题是我刚刚注意到 hashmap 不能有多个相同的键。我还应该使用什么来存储数据看起来像这样的数据:

  • 名称1 100.0
  • 名称2 99.8
  • 名称3 121.5
  • ...

我想做的另一件事是在我调用那个键时显示某个人的数据。那么,有没有办法存储与一个键相关的多个值?还是我应该使用其他类型的存储?

4

4 回答 4

3

如果您将值存储在另一个数据结构(例如链表或每个键索引处的树)中,则哈希图可能具有重复键。然后你只需要决定如何处理碰撞。

编辑:

哈希映射

["firstKey"] => LinkedList of (3,4,5)
["secondKey"] => null
["thirdKey"] => LinkedList of (3)
于 2012-11-24T05:54:28.060 回答
1

The Google guava library contain some collection type that allow for more that one element per key. The Multimap is the first one that come to mind.

http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/Multimap.html

Guava in general contain a lot of very convenient utilities, I think its worth checking out.

If you can't use an external library, you can simply (Like Matthew Cox said) mix a map and a List with Map<K, List<V>>. But that is a bit more inconvenient to work with since you have to initialise a list for every key.

于 2012-11-24T06:09:01.430 回答
1

要扩展 Matthew Coxes 的答案,您可以扩展 Hashtable 类,以便它自动为您管理列表,并让您看起来拥有多个键。

于 2012-11-24T05:57:01.223 回答
1

我宁愿使用我自己的数据模型并将其存储在列表中,或者如果您想要快速访问,则映射,例如

public class Player {
    private String name;
    private List<Float> scores;
}

优点:

  • 你可以很容易地看到,这个结构想要表达什么
  • 您可以轻松扩展它(例如为玩家添加别名,或计算玩家 1 的平均得分)
于 2012-11-24T08:14:48.127 回答