4

以下情况:我们有一个带有元素的向量,并希望将每个元素映射到一个整数。元素的映射应该与向量内元素的索引完全相同。例子:

Vector<String> v = new Vector<String>();
v.add("s1");
v.add("s2");

映射应该是:

"s1" -> 0
"s2" -> 1

方法一:v.indexOf("s1")用于获取整数。但是这种方法很慢,因为每次都必须搜索正确的索引。

方法 2:创建一个HashMapput在 for 循环中使用以将每个元素放入地图。

方法 2 还可以,但是有更好的解决方案来更直接地创建地图吗?

4

3 回答 3

1

如果Maps where 是为了这样的目的而设计的,为什么你觉得很奇怪?我知道,这是一个简单的映射,Map对于一个简单的任务,比如获取给定字符串的索引,使用 a 似乎真的很自大。

但是请考虑一下,方法 1 的行为就像Map<Integer,String>您按值查找并获取其相关键的地方,因此您可以坚持相反Map<String,Integer>,除非您被限制使用Vector.

我只是担心这是有人将“性能与内存”讨论提升到纳米级别的情况之一。

于 2013-02-04T13:46:01.160 回答
0

您可能要考虑的 HashMap 的替代方法是使用带有 Collections.binarySearch 的字符串的 ArrayList 来获取整数值。根据您计划有多少元素,这可能与 HashMap 方法相当。

于 2013-02-04T14:01:06.867 回答
-1

但是直接映射地图有更好的解决方案吗?

HashMap将是最适合使用的数据结构。

如何用整数创建一个简单的 HashMap?

HashMap<String, Integer> aHMap = new HashMap<String, Integer>();
aHMap.put("S1", 0); 
aHMap.get("S1");

或者

HashMap<Integer, String> aHMap = new HashMap<Integer, String>();
aHMap.put(0, "S1"); 
aHMap.get(0);
于 2013-02-04T13:47:00.673 回答