【问题标题】:How to return a list of keys from a Hash Map?如何从哈希映射中返回键列表?
【发布时间】:2011-09-29 04:55:02
【问题描述】:

我目前正在尝试制作一个将动词变位成西班牙语的程序。我创建了一个哈希表,其中包含一个键和对象动词的实例化。键是具有动词不定式形式的字符串(例如,“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,其中包含 Hash Map 中所有对象的键?还是有更有效的方法来解决这个问题?

【问题讨论】:

  • 你的addVerb()方法首先检查值是否存在,动词不应该是关键吗?
  • 这可能是我在 SO 上问过的最简单的问题,但它让我得到了最多的支持。

标签: java hashmap


【解决方案1】:

使用keySet() 方法返回一个包含Map 的所有键的集合。

如果您想保持地图有序,可以使用TreeMap。

【讨论】:

  • 如何获取键列表而不是 Set ?因为我需要在制作地图后访问各个键。
  • @gonephishing 例如,您可以将集合用作 ArrayList 的构造函数的参数..
【解决方案2】:
map.keySet()

将把所有的钥匙还给你。如果您希望对键进行排序,您可以考虑使用 TreeMap

【讨论】:

    【解决方案3】:

    使用map.keySet(),可以获得一组密钥。然后将这个集合转换成List by:

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

    然后使用l.get(int) 方法访问密钥。

    PS:- 来源- Most concise way to convert a Set<String> to a List<String>

    【讨论】:

    • 太棒了!像羚羊一样工作
    • 这会引发警告,不是吗?
    【解决方案4】:
     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 方法获取密钥,并且您必须传递索引,然后它将返回该特定索引处的密钥。这个循环将得到所有的关键

    【讨论】:

      【解决方案5】:

      从 Java 8 开始:

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

      【讨论】:

        【解决方案6】:
        List<String> yourList = new ArrayList<>(map.keySet());
        

        这样就好了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-11
          • 1970-01-01
          • 2014-09-25
          • 2015-10-27
          • 2011-09-30
          • 1970-01-01
          • 2011-08-14
          • 1970-01-01
          相关资源
          最近更新 更多