Java Generic HashMap实现:对象无法转换V

2023-12-22

我正在尝试实现一个泛型 HashMap,但由于某种原因,java 编译器不允许我返回正确的泛型类型。

这是我的 HashMap 代码:

public class SimpleHashMap<K,V> {
  private int tableSize;
  private HashEntry[] table;

  public SimpleHashMap(){
    table = new HashEntry[tableSize];
    for(int i = 0; i < table.length; i++){
      table[i] = null;
    }
  }

  public V put(K key, V value){
    int keyIndex = getHashCode(key);
    if(table[keyIndex] == null){
      table[keyIndex] = new HashEntry<K, V>(key, value);
    }
    else{
      table[keyIndex] = new HashEntry<K, V>(key, value, table[keyIndex]);
    }
    return value;
  }

  public V get(K key){
    int keyIndex = getHashCode(key);
    if(table[keyIndex] == null){
      return null;
    }
    else{
      HashEntry temp = table[keyIndex];
      while(temp != null){
        if(temp.key.equals(key)){
          return temp.value;
        }
        temp = temp.next;
      }
    }
  }

  public int getHashCode(K key){
    return key.hashCode() % tableSize;
  }
}

这是我的 HashEntry 代码:

public class HashEntry<K,V>{
  public K key;
  public V value;
  public HashEntry next;

  public HashEntry(K key, V value){
    this(key, value, null);
  }

  public HashEntry(K key, V value, HashEntry next){
    this.key = key;
    this.value = value;
    this.next = next;
  }
}

我在编译时遇到的唯一错误是:

error: incompatible types: Object cannot be converted to V
          return temp.value;
                     ^
  where V is a type-variable:
    V extends Object declared in class SimpleHashMap

我尝试显式转换它,但它仍然拒绝返回 V 类型的对象。


您需要使用如下类型声明临时变量:

HashEntry<K,V> temp = table[keyIndex];

您的 get 方法可以更新如下:

public V get(K key){
        int keyIndex = getHashCode(key);

        if(table[keyIndex] == null){
          return null;
        }
        else{
          HashEntry<K,V> temp = table[keyIndex];          
          while(temp != null){
            if(temp.key.equals(key)){
              return temp.value;
            }
            temp = temp.next;
          }
          return temp.value;
        }

      }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Generic HashMap实现:对象无法转换V 的相关文章

随机推荐

  • 将图像显示到 Windows 窗体中

    我想在 Windows 窗体上显示图像 但我已经这样做了 但图像没有显示出来 我哪里做错了 这是代码 private void Images object sender EventArgs e PictureBox pb1 new Pict
  • 如何使用 php 验证不一致端点?

    我在创建 Discord 机器人时遇到一些问题 我希望它能够响应斜杠命令 但要做到这一点 我需要验证端点 我使用的是 PHP 7 4 并且无法使用任何外部库 托管在不允许使用它们的服务器上 我找到了 PHP 的文档 但它们确实需要库才能工作
  • 在 Xcode 上的图像上添加文本

    我想制作一个类似于某些贺卡应用程序的 iPhone 应用程序 我可以在一些预先准备好的背景图像 卡片 上写入文本 我该如何写这段文字 如何将背景图像 文本保存在一个图像文件中 Thanks 这是一种将字符串刻录成图像的方法 您可以调整字体大
  • 最快的实时解压算法

    我正在寻找一种算法 以最小的开销实时解压缩数据块 1k 30k 压缩速度最好要快 但不如解压速度那么重要 据我所知 LZO1X 是最快的 我错过了什么吗 理想情况下 该算法不受 GPL 约束 lz4 https github com lz4
  • 如何清除 MassTransit 队列?

    我想在集成测试设置例程中删除队列中的所有消息 如何实现 谷歌搜索 智能感知暴力没有运气 如果重要的话 我使用 RabbitMq 作为传输 无法从 MassTransit 内的队列中 删除 对于测试 您可以通过使用临时的随机队列 URIrab
  • 如何使用 Polymer 将自定义字体导入应用程序或元素?

    如何将自定义字体导入 Polymer 应用程序或元素 根据 tweightman 的聚合物松弛通道 https polymer slack com
  • React Hook useEffect 缺少依赖项:“list”

    运行以下代码后 我收到以下错误 React Hook useEffect 缺少依赖项 list 包含它或删除依赖项数组react hooks exhaustive deps 我找不到警告的原因 import React useState u
  • 在控制器构造函数中使用 User.Identity.Name 定义用户

    对于要与用户帐户交互的操作 除了在调用控制器上的任何操作后立即将该对象添加到 ViewData TheUser 之外 我还想创建一个 TheUser 对象 如果用户已登录 它将从数据库中获取用户的信息 如果没有 TheUser 对象将为空
  • 是否可以编写命令来支持多行参数,即其中包含换行符,如heredocs?

    Overview 如何编写一个 sbt 命令来支持其中包含换行符的参数 heredocs http en wikipedia org wiki Here document 我想要一个 sbt 命令 用户可以在其中粘贴多行文本块 然后将其处理
  • 自定义进度条中的圆角渐变

    你会如何制作圆角渐变ProgressBar就像屏幕上一样 我现在拥有的 pb shape xml
  • 在服务器上使用旧版本的 SVN 进行签出

    我已经厌倦了检查这个存储库 但由于主机和客户端计算机上的 SVN 版本不同 它返回一个解压错误 svn co http svn rdlab cs upc edu subversion asiya public asiya A asiya b
  • 使用现有项目将 json 反序列化为 C# 列表

    给定以下课程 class Report public Report this Fields new List
  • Sqoop 将所有表导入 hive 时遇到以下语句

    默认情况下 表将移动到 HDFS 而不是仓库目录 user hive warehouse sqoop import all tables num mappers 1 connect jdbc mysql quickstart clouder
  • 为什么 PostgreSQL (9.1) 不使用索引进行简单的相等选择?

    我的桌子lead有一个索引 d lead Indexes lead pkey PRIMARY KEY btree id lead account c btree account c lead email btree email lead i
  • 使用azure功能在移动应用程序中进行身份验证

    我正在尝试开发一个无服务器后端对于我的 xamarin 应用程序 为此我选择了天蓝色函数 现在我已经知道了Azure 移动应用程序提供一个SDK为此 我们可以轻松启用验证有以下多种方式 1 Azure Active Directory 2
  • Google Maps API v3 - 不同缩放级别上的不同标记/标签

    我想知道谷歌是否有可能具有在不同缩放级别查看不同标记的功能 例如 在缩放级别 1 上 我希望在中国上方有一个标记 其标签上写着 5 当用户放大时 假设缩放级别为 4 我希望之前的标记和标签消失 我想要 5 个新的标记 标签 每个标记 标签位
  • opencart 上的权限被拒绝

    我试图为 opencart 创建一个支付模块 当我尝试在设置页面中保存详细信息时 出现错误 权限被拒绝 即使我以管理员身份登录 有人能帮我吗 你需要给自己设置权限 去 SYSTEM gt USERS gt USER GROUPS 在管理面板
  • iOS:使用证书和签名验证文件 - 公钥错误,验证失败

    我有三样东西 一个文件 一个签名文件和一个 X509 证书文件 cer 必须使用证书和签名文件中的公钥来验证该文件 我想使用 Security h CommonCrypto 来完成此操作 到目前为止我尝试过的 load all the fi
  • 如何在 Golang gRPC 中获取客户端 IP 地址和用户代理?

    我设置了一系列 gRPC 请求和响应 它们都工作正常 但当我尝试获取客户端 IP 地址和调用我的 gRPC API 的用户代理时 我陷入困境 我阅读了 Go gRPC 文档和其他来源 但没有找到太多有价值的信息 他们中很少有人谈论 Gola
  • Java Generic HashMap实现:对象无法转换V

    我正在尝试实现一个泛型 HashMap 但由于某种原因 java 编译器不允许我返回正确的泛型类型 这是我的 HashMap 代码 public class SimpleHashMap