Java 散列多映射问题

Java 散列多映射问题,java,hashmap,Java,Hashmap,关于Java HashMap,我有两个问题: 1在Java HashMap的任何实现中,是否可以从值中获取相应的键?我正在使用HashMultiMap键-多个值 2在Java HashMap的任何实现中都有可能获得HashMap中的键位置吗?如果是这样,那么如果我添加了新的钥匙,钥匙位置是否可能改变?我正在使用HashMultiMap键-多个值 如果两个答案都不是,那么如何手动实现任何想法 1是的,但不是以一种有效的方式,而且接口映射中没有方法可以通过一个方法调用来实现这一点。您必须迭代映射的条

关于Java HashMap,我有两个问题:

1在Java HashMap的任何实现中,是否可以从值中获取相应的键?我正在使用HashMultiMap键-多个值

2在Java HashMap的任何实现中都有可能获得HashMap中的键位置吗?如果是这样,那么如果我添加了新的钥匙,钥匙位置是否可能改变?我正在使用HashMultiMap键-多个值


如果两个答案都不是,那么如何手动实现任何想法

1是的,但不是以一种有效的方式,而且接口映射中没有方法可以通过一个方法调用来实现这一点。您必须迭代映射的条目,直到找到一个具有您要查找的值的条目;然后您就有了相应条目的密钥。有一些实现,比如BiMap,可以让您高效地进行反向查找


2否,因为映射不是有序集合:键在映射中没有定义的位置。如果需要,可以使用LinkedHashMap,它将键值对按插入到映射中的顺序保存。

1是,但不是以有效的方式,而且接口映射中没有方法可以通过一个方法调用来执行此操作。您必须迭代映射的条目,直到找到一个具有您要查找的值的条目;然后您就有了相应条目的密钥。有一些实现,比如BiMap,可以让您高效地进行反向查找


2否,因为映射不是有序集合:键在映射中没有定义的位置。如果需要,可以使用LinkedHashMap,它将键值对按插入映射的顺序保存。

映射中的位置是什么意思?地图是不可索引的,所以这并不意味着什么。@JoachimSauer,我在一些web文档中发现,可以使用其他结构,如HashMap,但不清楚。这就是为什么,我问。你想通过得到这个职位来解决什么问题?你为什么在乎?你所说的地图上的位置是什么意思?地图是不可索引的,所以这并不意味着什么。@JoachimSauer,我在一些web文档中发现,可以使用其他结构,如HashMap,但不清楚。这就是为什么,我问。你想通过得到这个职位来解决什么问题?你为什么在乎?非常感谢。但是,HashMultiMap键也可以有多个值吗?我在这里找到了一个位图示例,其中只有一个值的键。这对具有多个值的键也是可能的吗?据我所知,在Guava中没有现成的实现,既有BiMap又有Multimap,因此您必须自己编写一个查找方法。我们没有发现对BiMultimap的太多需求,但另一方面,ImmutableSetMultimap有一个反向方法,可以像BiMultimap一样构造反向映射。另一方面,这是一个昂贵的操作,因此如果需要,请尝试只调用一次inverse,然后在同一个multimap上执行所有查询。非常感谢。但是,HashMultiMap键也可以有多个值吗?我在这里找到了一个位图示例,其中只有一个值的键。这对具有多个值的键也是可能的吗?据我所知,在Guava中没有现成的实现,既有BiMap又有Multimap,因此您必须自己编写一个查找方法。我们没有发现对BiMultimap的太多需求,但另一方面,ImmutableSetMultimap有一个反向方法,可以像BiMultimap一样构造反向映射。另一方面,这是一个昂贵的操作,因此如果需要,请尝试只调用一次inverse,然后在同一个multimap上执行所有查询。