如何从HashMap中获取值和键?

70

我正在用Java编写一个简单的文本编辑器。当用户打开它时,将在JTabbedPane中打开一个文件。我按以下方式保存已打开的文件:

HashMap<String,Tab> hash = new HashMap<String,Tab>();

其中Tab会接收一些值,例如:File file,JTextArea container,JTabbedPane tab

我有一个名为Tab的类:

public Tab(File file, JTextArea container, JTabbedPane tab)
{
    this.file = file;
    this.container = container;
    this.tab = tab;
    tab.add(file.getName(), container);
    readFile();
}

现在,在这个SaveFile类中,我需要获取存储在HashMap中的Tab值。我该怎么做?


已经了吗?话题总是如此消极。 - user2279895
11个回答

124

获取地图中的所有值:

for (Tab tab : hash.values()) {
    // do something with tab
}

要从映射中获取所有条目:

for ( Map.Entry<String, Tab> entry : hash.entrySet()) {
    String key = entry.getKey();
    Tab tab = entry.getValue();
    // do something with key and/or tab
}

Java 8 更新:

处理所有的值:

hash.values().forEach(tab -> /* do something with tab */);

处理所有条目:

hash.forEach((key, tab) -> /* do something with key and tab */);

38

Map 是由 Map.Entry 对象组成的。每个 Entry 包含一个 key 和一个 value。要从 entry 获取 key 和 value,您可以使用访问器和修改器方法。

如果您想获取给定 keyvalues,请使用 get() 方法;如果要插入值,请使用 put() 方法。

#Define and initialize map;
Map map = new HashMap();
map.put("USA",1)
map.put("Japan",3)
map.put("China",2)
map.put("India",5)
map.put("Germany",4)

map.get("Germany") // returns 4

如果您想从映射中获取键的集合,可以使用keySet()方法。

Set keys = map.keySet();
System.out.println("All keys are: " + keys);
// To get all key: value
for(String key: keys){
    System.out.println(key + ": " + map.get(key));
}

通常,要从Map中获取所有键和值,您需要按照以下顺序进行:

  • HashMap 转换为 MapSet ,使用 entryset() 方法获取 Map 中的条目集合:
    Set st = map.entrySet();
  • 获取此集合的迭代器:
    Iterator it = st.iterator();
  • 从迭代器中获取 Map.Entry
    Map.Entry entry = it.next();
  • 使用 Map.EntrygetKey()getValue() 方法获取键和值。
// Now access it
Set st = (Set) map.entrySet();
Iterator it = st.iterator();
while(it.hasNext()){
    Map.Entry entry = mapIterator.next();
    System.out.print(entry.getKey() + " : " + entry.getValue());
}

简而言之,在for循环中直接使用迭代器

for(Map.Entry entry:map.entrySet()){
    System.out.print(entry.getKey() + " : " + entry.getValue());
}

14

你给一个美元,它会给你一个芝士汉堡。你给一个字符串,它会给你一个制表符。使用HashMap的GET方法来获取你想要的。

HashMap.get("String");

3
应该是 HashMapObj.get("String"); 吧? - Hritik
2
你在2022年支付1美元,却得不到汉堡;-) - Andrei Drynov

4

获取HashMap中的值和键 您可以使用HashMap的方法values()和keySet()来获取它们。

public static List getValues(Map map) {
    return new ArrayList(map.values());
}

public static List getKeys(Map map) {
    return new ArrayList(map.keySet());
}

3
for (Map.Entry<String, Tab> entry : hash.entrySet()) {
    String key = entry.getKey();
    Tab tab = entry.getValue();
    // do something with key and/or tab
}

运作得像魔法一样。


3
它将与 hash.get("key"); 一起使用。这里的“key”是从Map中获取值的键。

答案没有带来任何新的东西,其他答案已经解释了这个问题并且更详细。 - Andrejs

2

You could use iterator to do that:

For keys:

for (Iterator <tab> itr= hash.keySet().iterator(); itr.hasNext();) {
    // use itr.next() to get the key value
}

您可以类似地使用迭代器来处理值。

2
使用哈希映射的“string”键来访问其值,该值是您的选项卡类。
Tab mytab = hash.get("your_string_key_used_to_insert");

1
使用Java 8流API:
List values = map.entrySet().stream().map(Map.Entry::getValue).collect(Collectors.toList());

5
那个火车失事就跟只有 map.values() 一样。 - Bohemian

0
使用Java 8的功能:
    map.forEach((key, value) -> System.out.println(key + " " + value));

使用 Map.Entry 可以像这样打印:

 for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) 
 {
     System.out.println(entry.getKey()+" : "+entry.getValue());
 }

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