java - 如何正确使用Map.Entry接口(interface),为什么Map.Entry的方法已经实现了?

标签 java dictionary hashmap

我对使用 Map.Entry 接口(interface)感到困惑。我找到了一个使用 Map.Entry 的示例,如下所示,但如果在其类末尾添加“implements Map.Entry”,则会返回错误。另外,接口(interface)不应该实现其方法,但该接口(interface)中实现了 5 个方法(equals、getKey、getValue、hashCode、setValue)。有人能解释一下这是怎么回事吗?

此外,根据 Oracle 的 Java 教程,“如果您的类声明实现一个接口(interface),则在该类成功编译之前,该接口(interface)定义的所有方法都必须出现在其源代码中。”所以我想既然下面的例子不需要实现Map.Entry接口(interface),那么就没有必要实现Oracle的Java API中列出的5个方法。但为什么呢?

import java.util.HashMap;
import java.util.*;

class Dog {
    String color;

    Dog(String c)  color = c;
    public boolean equals(Object o) 
        return ((Dog) o).color.equals(this.color);  
    public int hashCode() 
        return color.length();
    public String toString()
        return color + " dog";  
}

public class TestHashMap {
  public static void main(String[] args) {
    HashMap<Dog, Integer> hashMap = new HashMap<Dog, Integer>();
    Dog d1 = new Dog("red");
    Dog d2 = new Dog("black");
    Dog d3 = new Dog("white");
    Dog d4 = new Dog("white");

    hashMap.put(d1, 10);
    hashMap.put(d2, 15);
    hashMap.put(d3, 5);
    hashMap.put(d4, 20);

    //print size
    System.out.println(hashMap.size());

    //loop HashMap
    for (Map.Entry<Dog, Integer> entry : hashMap.entrySet()) {
      System.out.println(entry.getKey().toString() + " - "+      entry.getValue());
    }
  }
}

最佳答案

Map.Entry 是一个键值对,如 View Map.entrySet() 中返回的那样。您的类 Dog 被用作 key ;它不是,也不需要是 Map.EntryMap.Entry 的实现通常是 Map 本身的实现细节。您很少需要实现一个。

关于java - 如何正确使用Map.Entry接口(interface),为什么Map.Entry的方法已经实现了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28492977/

相关文章:

Java Mail 下载附件 Office 365 缓慢

java - 使用java实时获取流程输出

python - 如何从数组生成字典的字典?

python - Python 中的 HashMap

java - 在 Java 中将 List<String> 转换为 Map<String, String>

java - 通过java使用谷歌云存储

java - 使用 Apache CXF 的 WS-Security UsernameToken

dictionary - 来自 CMU 发音数据库的押韵词典

javascript - 如何在数组中正确使用map()?

java - 使用 name 或 id 在 hashmap 中搜索