Java中如何从HashMap中获取键位置

Java中如何从HashMap中获取键位置,java,Java,我怎样才能得到地图上的关键位置?我怎样才能知道“奥迪”和“宝马”在哪个位置 Map Map=newhashmap(); 地图放置(“奥迪”,3); 地图放置(“宝马”,5); 你不能。从: 基于哈希表的映射接口实现。这个实现提供了所有可选的映射操作,并允许空值和空键。(HashMap类大致相当于Hashtable,只是它不同步并且允许空值。)该类不保证映射的顺序;特别是,它不能保证订单在一段时间内保持不变 因此,迭代之间的顺序可能会有所不同。如果您需要保留订单,可以查看LinkedHashMap

我怎样才能得到地图上的关键位置?我怎样才能知道“奥迪”和“宝马”在哪个位置

Map Map=newhashmap();
地图放置(“奥迪”,3);
地图放置(“宝马”,5);
你不能。从:

基于哈希表的映射接口实现。这个实现提供了所有可选的映射操作,并允许空值和空键。(HashMap类大致相当于Hashtable,只是它不同步并且允许空值。)该类不保证映射的顺序;特别是,它不能保证订单在一段时间内保持不变

因此,迭代之间的顺序可能会有所不同。如果您需要保留订单,可以查看
LinkedHashMap

从:

哈希表和链表实现的映射接口,具有可预测的迭代顺序。此实现与HashMap的不同之处在于,它维护一个贯穿其所有条目的双链接列表。此链表定义了迭代顺序,通常是将关键帧插入贴图的顺序(插入顺序)

因此,要找到关键点位置,基本上需要迭代关键点并计算要搜索的关键点的位置


另一方面,IMO这可能不是
Map
数据类型的最佳使用。我认为如果你真的需要这个位置,你应该使用某种类型的
列表(例如
ArrayList
),它实际上保留了顺序,你可以使用
get
方法来检索某个索引的元素

你不能。Map和HashMap上的键没有顺序。您需要使用一个保持顺序的结构,例如

请注意,LinkedHashMap不提供按位置获取键的方法,因此这仅适用于使用迭代器的情况

另一种方法是创建从关键点映射到整数位置的第二个贴图,并在继续操作时添加到其中:

Map<String, Integer> indexMap = new HashMap<String, Integer>();
indexMap.put("Audi", 0);
indexMap.put("BMW", 1);
Map indexMap=newhashmap();
indexMap.put(“奥迪”,0);
indexMap.put(“宝马”,1);

对于更优雅的解决方案,您可能需要提供更多关于您正在做什么的信息。

因为其他答案说明您需要使用类似于
java.util.LinkedHashMap的结构。LinkedHashMap使用
LinkedEntrySet
在内部维护其键,这并不正式提供顺序,而是按照使用的插入顺序进行迭代

如果将
Map.keySet()
传递到列表实现中,则可以使用
List.indexOf(Object)
方法,而无需在其他答案中写入任何额外的代码

Map<String, Integer> map = new LinkedHashMap<String, Integer>();
map.put("Audi", 3);
map.put("BMW", 5);
map.put("Vauxhall", 7);

List<String> indexes = new ArrayList<String>(map.keySet()); // <== Set to List

// BOOM !

System.out.println(indexes.indexOf("Audi"));     // ==> 0
System.out.println(indexes.indexOf("BMW"));      // ==> 1
System.out.println(indexes.indexOf("Vauxhall")); // ==> 2
Map Map=newlinkedhashmap();
地图放置(“奥迪”,3);
地图放置(“宝马”,5);
地图放置(“沃克斯霍尔”,7);
列表索引=新的ArrayList(map.keySet());//0
System.out.println(index.indexOf(“BMW”);//=>1.
System.out.println(index.indexOf(“Vauxhall”);//=>2.

你所说的职位是什么意思?谢谢。我看了看这里:但是嗯。。。它没有告诉我如何得到元素的位置。你能给我举个小例子吗?我有两个文件。其中一个有名字,另一个有数字。这些线是相关的。如果我在第一个文件的第一行有“John”,在另一个文件的第一行有“1000”,这意味着John有1000美元。我想以某种方式将它们链接起来,以便根据数字对它们进行排序。
Map<String, Integer> map = new LinkedHashMap<String, Integer>();
map.put("Audi", 3);
map.put("BMW", 5);
map.put("Vauxhall", 7);

List<String> indexes = new ArrayList<String>(map.keySet()); // <== Set to List

// BOOM !

System.out.println(indexes.indexOf("Audi"));     // ==> 0
System.out.println(indexes.indexOf("BMW"));      // ==> 1
System.out.println(indexes.indexOf("Vauxhall")); // ==> 2