如何从哈希映射中返回键列表?

79

我现在正在尝试编写一个能将动词转化为西班牙语的程序。我创建了一个哈希表,其中包含一个键和一个Verb对象的实例。键是一个字符串,表示动词的原形式(例如,“hablar”)。这是我目前为止用于哈希映射的代码:

public class VerbHashMap {

    HashMap<String, Verb> verbHashMap;

    public VerbHashMap(){
        verbHashMap = new HashMap();
    }   
}

HashMap中每个动词的键都是基于动词的不定式形式。例如,字符串“hablar”是西班牙语动词的键。类Verb有一个名为getInfinitive()的方法,它返回包含动词不定式形式的字符串。

public boolean addVerb(Verb verb){
    if(verbHashMap.containsValue(verb.getInfinitive()){
        return false;
    }
    else{
        verbHashMap.put(verb.getInfinitive(), verb);
        return true;
    }
}

问题是如何创建一种最有效的方法来返回哈希映射中所有动词按字母顺序排列的列表? 我应该将方法返回一个ArrayList,其中包括哈希映射中所有对象的键吗? 还是有更加高效的方法来解决这个问题?


你的 addVerb() 方法检查值是否存在的方式,动词不应该是键吗? - Marcelo
2
这可能是我在SO上问过的最简单的问题,但它带给我的赞数远远超过其他问题。 - idungotnosn
6个回答

110
使用keySet()方法返回包含Map所有键的集合。
如果您想保持Map有序,可以使用TreeMap

1
我该如何获取键的列表而不是集合?因为我需要在创建Map后访问各个键。 - gonephishing
8
例如,您可以将集合用作ArrayList构造函数的参数。 - Marcelo

105

使用 map.keySet(),您可以获得键的集合。然后通过以下方式将此集合转换为 List

```java List<String> keys = new ArrayList<>(map.keySet()); ```
List<String> l = new ArrayList<String>(map.keySet());

然后使用 l.get(int) 方法来访问键。

PS:- 来源于- 将Set<String>转换为List<String>的最简洁方法


太棒了!像一只魔术般地运行。 - Michael Sims
这会引发一个警告,对吗? - Martin Meeser

15
List<String> yourList = new ArrayList<>(map.keySet());

这样做就可以了。


9

自 Java 8 以来:

List<String> myList = map.keySet().stream().collect(Collectors.toList());

9
map.keySet()

将返回所有的键。如果您希望键被排序,可以考虑使用TreeMap。


-1
 for(int i=0;i<ytFiles.size();i++){

                    int key = ytFiles.keyAt(i);
                    Log.e("key", String.valueOf(key));
                    String format = ytFiles.get(key).getFormat().toString();
                    String url = ytFiles.get(key).getUrl();
                    Log.e("url",url);
                }

你可以通过keyat方法获取键,需要传递索引,然后它将返回该特定索引处的键。这个循环将获取所有的键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接