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

Java 如何用整数创建一个简单的HashMap?,java,map,Java,Map,以下情况: 我们有一个包含元素的向量,希望将每个元素映射为一个整数。元素的映射应该与向量中元素的索引完全相同。例如: Vector<String> v = new Vector<String>(); v.add("s1"); v.add("s2"); 方法1:使用v.indexOf(“s1”)获取整数。但是这种方法很慢,因为每次都要搜索正确的索引 方法2:创建一个HashMap,并在for循环中使用put,将每个元素放到映射中 方法2是可以的,但是有更好的解决方案来更直

以下情况: 我们有一个包含元素的向量,希望将每个元素映射为一个整数。元素的映射应该与向量中元素的索引完全相同。例如:

Vector<String> v = new Vector<String>();
v.add("s1");
v.add("s2");
方法1:使用
v.indexOf(“s1”)
获取整数。但是这种方法很慢,因为每次都要搜索正确的索引

方法2:创建一个
HashMap
,并在for循环中使用
put
,将每个元素放到映射中


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

如果
Map
s是出于这样的目的而设计的,为什么您觉得奇怪?我知道,这是一个简单的映射,使用
Map
对于获取给定字符串的索引这样的简单任务来说似乎非常浮夸

但是想想看,方法1的行为就像一个
映射
,您通过值进行搜索并获得其相关键,因此您可以坚持使用反向
映射
,除非您被限制使用
向量

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

但是,有没有更好的解决方案可以直接使用地图呢

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

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

HashMap aHMap=newhashmap();
aHMap.put(“S1”,0);
aHMap.get(“S1”);

HashMap aHMap=newhashmap();
aHMap.put(0,“S1”);
aHMap.get(0);

一个可能要考虑的HASMAP的替代方案是使用Calth.SnByAsQuess使用字符串的数组来获得整数值。取决于你计划的元素有多少与HasMMAP方法一致。

为什么你要有这样的映射?请使用
ArrayList
而不是legacy
Vector
@RohitJain-这与问题无关。此外,他可能有合理的理由使用
Vector
。首先,为什么你有一个向量,如果你需要一个有序的映射(我假设你需要跟踪你的添加操作),你可以使用
OrderedMap
没有更好的解决方案。但我看不出有什么不好。这只是两行代码。请注意,如果向量包含重复项,您将丢失信息。@AlekseiBulgak-因为您可能需要线程安全的
列表。或者因为您使用的是其他(旧)API,它要求您使用
向量
Vector
是正确选择的情况非常罕见。。。但它们确实存在。你们仔细阅读了这个问题吗?方法2:创建一个HashMap并在for循环中使用put将每个元素放到映射中。@Azodious问题不在于如何实现该方法,而在于是否有更好的方法。它也不是关于hashmap是否是一个好的数据结构,而是有没有更直接的方法来实例化它。@Azodious我同意eisbinarySearch要求对列表进行排序,这是一个非常严格的要求。@JB Nizet-问题的“解决方案2”似乎暗示所有需要的元素都已经存在,并且可以按正确的顺序添加。啊,你的意思是他可以创建向量的排序副本,并对该排序副本使用二进制搜索。如果是的话,那么是的,他可以做到。但我真的看不出与映射相比会有什么好处。@JB Nizet-内存占用会有所增加,对于小集合,计算时间也会有所提高。不幸的是,我的向量没有排序,但这是一个好主意。谢谢。对我来说,这与表演无关。我想知道是否有一些内置函数可以更直接地完成任务。但既然不是这样,方法2对我来说很好。不客气。你知道,
Map
似乎是解决类似问题的一种方法,但通常情况下,集合中某个对象的索引是通过搜索确定的。
"s1" -> 0
"s2" -> 1
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);