初始化一个包含 List 的 Map

2024-01-13

我需要使用里面有列表的地图:

Map<String, List<String>> keyToGroup = new HashMap<String, ArrayList<String>>();

我在 Eclipse 中的这一行收到编译器错误。

唯一有效的事情似乎是将 Map 中的内部 List 更改为 ArrayList

Map<String, ArrayList<String>> keyToGroup = new HashMap<String, ArrayList<String>>();

我不得不更改许多接口方法的签名,但我仍然不明白;为什么第一个定义不起作用?

不是一样的吗,不应该

Map<String, List<String>> keyToGroup 

&

Map<String, ArrayList<String>>

是相同的?


不,他们不是。考虑一下:

Map<String, List<String>> keyToGroup = new HashMap<String, ArrayList<String>>();
keyToGroup.put("foo", new LinkedList<String>());

第二行很好,因为LinkedList<String> is a List<String>- 但将其添加到 a 中在逻辑上并不好HashMap<String, ArrayList<String>>,因为一个LinkedList<String> is not an ArrayList<String>.

为了更清楚地说明:

Map<String, ArrayList<String>> map1 = new HashMap<String, ArrayList<String>>();
Map<String, List<String>> map2 = map1; // This is invalid
map2.put("foo", new LinkedList<String>());
ArrayList<String> oops = map1.get("foo"); // Because this would be broken

这不仅仅是集合作为类型参数的情况。使用普通继承更容易看到:

List<Banana> bunchOfBananas = new ArrayList<Banana>();
List<Fruit> fruitBowl = bunchOfBananas; // Invalid!
fruitBowl.add(new Apple());
Banana banana = bunchOfBananas.get(0);

尽管每根香蕉都是一种水果,所以“香蕉的集合”是“水果的集合*”fetching对他们来说,并不是所有的水果都是香蕉。

您可以使用通配符参数化类型 http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#Topic4在某些情况下会有所帮助,但这取决于您想要实现的目标。

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

初始化一个包含 List 的 Map 的相关文章

  • 通过 SSH 隧道远程访问 MySQL 数据库

    我正在尝试编写 Java 程序来使用 ssh 隧道访问远程 mySQL 数据库 下面是我的代码 int lport 5656 int rport 3306 String rhost 111 222 333 444 String host 1
  • 从 PDF 中提取不可选择的内容

    我正在使用 Apache PDFBox 从 PDF 文件中提取页面 但找不到提取不可选择的内容 文本或图像 的方法 从 PDF 文件中选择内容是没有问题的 请注意 相关 PDF 在复制内容方面没有任何限制 至少从我在文件的 文档限制摘要 中
  • 如何以编程方式检查应用程序是否在调试模式下运行?

    我必须在应用程序中的某个位置确定我的应用程序是在调试模式还是实时模式下运行 是否有任何函数或代码可用于检查 在开 关两种情况下都会返回 true false 如果是这样 请帮助我 提前致谢 从问题中尚不清楚调试模式是否指的是 应用程序是否可
  • Windows 上的虚假唤醒。是否可以?

    我最近学习了 虚假唤醒 有人说这个问题只可能发生在某些类型的 Linux PC 上 我用的是窗户 我为虚假唤醒编写了测试 我得到的结果是这是可能的 但我想向您展示这个测试 也许我在某个地方犯了错误 我的初始变体 import java ut
  • 修复 java 内存泄漏的学习网站

    学习修复 java 内存泄漏的最佳地点是什么 我一直试图在网络上找到好的资源 但令我失望的是 我发现正在讨论玩具示例 我还能够对小型玩具转储进行故障排除 但现实世界的应用程序转储更具挑战性 并且提供的线索很少 我尝试过 Jhat JMap
  • java中如何围绕另一个移动对象旋转一个对象?

    我对 Java 很陌生 想要编写一个简单的太阳系统 其中月球绕地球旋转 地球绕太阳旋转 一切正常 除了月亮不想正确移动 由于地球偏离月球的初始位置 月球的自转半径会根据该距离而增大 同样 当地球接近月球惯性位置时 自转半径会减小 如果初始位
  • 如何通过keytool命令删除已经导入的证书/别名?

    我正在尝试通过 keytool 命令删除已导入的证书 keytool delete noprompt alias initcert keystore keycloak jks 但低于异常 keytool 错误 java lang Excep
  • 使用 ScheduledExecutorService 安排每月任务

    我想在该月的某一天的特定时间安排一项任务 每次运行之间的间隔可以设置在 1 到 12 个月之间 在java中 可以使用ScheduledExecutorService以固定的时间间隔调度任务 既然一个月的天数不固定 那么如何实现呢 提前致谢
  • Spring Batch:比较数据库之间的数据

    我有两个数据库 Oracle 和 MySQL 目标是将Oracle表中的值保存到MySQL中 要求 MySQL表中不存在数据 但我在理解 Spring Batch 时遇到了困难 步骤中 它包含itemReader itemProcessor
  • WSDL 表示中的枚举类型

    WSDL 表示如下
  • 在 Java 和 PHP 之间加密/解密字符串

    我使用 AES 加密来加密和解密服务器端的 php 和 Android 应用程序 作为客户端 之间的字符串 PHP 中的加密字符串为 HaxRKnMxT24kCJWUXaVvqDHahzurJQK sYA4lIHql U 在 Java 中是
  • 从外部 clojar 导入/使用资源

    我想做的是将一个大文件 MIDI 声音字体 打包到一个独立的 Maven repo clojar 中 然后能够以编程方式将其拉下来并从单独的项目中使用它 事实证明 这个看似简单的任务比我想象的要复杂 理想的情况是 如果有一种方法可以直接访问
  • 用java解密AES加密文件

    我有一个使用 AES 使用 java 应用程序加密的文件 我还有一个加密的密钥文件 但我不明白如何使用密钥来解密文件 大多数教程和示例都会在一个地方创建临时随机密钥 加密文件和解密 所以 问题是如何指定解密时必须使用的密钥 EDIT 我发现
  • 使用 javax.mail 和 CentOS 的邮件服务器

    我有一个 Java 程序 安装在一台旧的 Ubuntu 机器上 并使用 javax mail 发送邮件 然而 那台机器宕机了 我现在在新的 CentOS 机器上运行相同的 Java 应用程序 但是 当我尝试使用 mail smtp host
  • 如何在最短的时间内克隆java中的输入流

    有人可以告诉我如何克隆输入流 并花费尽可能少的创建时间吗 我需要多次克隆输入流以使用多种方法来处理 IS 我尝试了三种方法 但由于这样或那样的原因 事情不起作用 方法 1 感谢 stackoverflow 社区 我发现以下链接很有帮助 并将
  • 无法运行简单的 doclet 程序:包 com.sun.javadoc 不存在

    我正在尝试运行一个简单的 doclet 程序 但无法编译它 javac cp cygdrive c Progra 2 Java jdk1 8 0 65 lib tools jar A java 但它抛出 A java 1 错误 包 com
  • Spring Data JPA 和 Exists 查询

    我正在使用 Spring Data JPA 使用 Hibernate 作为我的 JPA 提供程序 并想要定义一个exists附加 HQL 查询的方法 public interface MyEntityRepository extends C
  • SAXParseException:找不到元素“定义”的声明

    我对 camunda 和 DMN 完全陌生 我试图在 spring boot 中运行 DMN 示例 链接在这里 https github com camunda camunda bpm examples tree master dmn en
  • 1° 夏令时 Java 和 JS 表现出不同的行为

    假设巴西利亚 GMT 0300 夏令时于 21 10 2012 00 00 00 此时时钟应提前一小时 Java new Date 2012 1900 9 21 0 0 0 Sun Oct 21 01 00 00 BRST 2012 Chr
  • Spring JMS开始根据请求监听jms队列

    Spring提供 JMSListener用于监听来自特定队列的消息的注释 还有一个替代方案实施JmsListenerConfigurer http docs spring io spring docs current spring fram

随机推荐

  • 使用 nasm 在 64 位和 32 位架构上从汇编语言调用 printf

    我想在linux中从汇编语言调用printf函数 我想知道64位和32位汇编语言程序的方法 1 如果我想用字符串在 printf 中传递 32 位参数和 64 位参数 请告诉我两种情况 我该怎么做 2 对于 x86 32 位架构 如果我想做
  • pgAdmin 中的主键和外键

    我想知道有人能给我解释一下如何在 pgAdmin 中分配主键和外键吗 我在网上找不到任何信息 例如 我有一个学生表 其中包含他们的所有详细信息 地址 出生日期等 我将向表中添加一个 Student number 并使其成为主键 我只是想知道
  • 反射问题——类型安全警告

    Class getConstructors http java sun com javase 6 docs api java lang Class html get
  • 通过属性值对 XML 进行排序 PHP

    所以我有一个 XML 文件 我试图根据属性 order 按顺序循环遍历该文件 这是一个例子
  • JUnit 3 是否有类似于 @Ignore 的东西

    我被迫使用 JUnit 3 如果我使用 JUnit 4 我偶尔会使用 Ignore因为我的一些测试需要一些时间 JUnit 4 中有类似的东西吗 注释掉测试很草率 并且更改了名称 来自testXxx 可能会导致忘记测试 Ignore很棒 因
  • 富文本框如何突出显示文本块

    我需要在 RTB 中突出显示文本的特定部分 不是指更改字体样式 颜色 而是指使用特定颜色进行块选择 这类似于 Visual Studio 在调试模式下突出显示一行的方式 我如何使用 RTB 来实现此功能 或者更确切地说 这是否可能 如果不可
  • 为不同节点类型配置jstree右键上下文菜单

    我在网上看到了一个示例 展示了如何自定义 jstree 右键单击 上下文菜单的外观 使用 contextmenu 插件 例如 允许我的用户删除 文档 但不能删除 文件夹 通过从文件夹的上下文菜单中隐藏 删除 选项 现在我找不到那个例子了 有
  • R 中的 pheatmap 格式:图例大小并创建方形图

    Pheatmap 仅在 legend FALSE 时创建方形图 我尝试使用 par 来允许更多 oma 和 mar 空间 但运气不佳 图例也很大 我找不到任何有关减少此图例或更改其位置的文档 第一个图没有安装树状图 但这与尺寸问题无关 无论
  • 使用股票代码输入、yahoo 或 google API 检索公司名称

    只是寻找一个简单的 api 返回 我可以在其中输入股票代码并接收完整的公司名称 股票代码 MSFT 将返回 微软 import yfinance as yf msft yf Ticker MSFT company name msft inf
  • 如何将 NSPanel 显示为工作表

    我正在尝试将 NSPanel 显示为工作表 我天真地沿着这些路线做一些事情 SheetController sheetController SheetController alloc initWithWindowNibName Sheet
  • maven buildnumber插件错误The scm url can not be null

    我是 Maven 的新用户 并且很难让 buildnumber maven plugin 执行我所期望的操作 本质上 我希望 maven 构建我的项目并创建结果的 JAR 文件 并在 manifest mf 文件中设置构建号 我将在下面包含
  • 如何抑制此 COM 泛型警告?

    我正在使用 msbuild 编译 VB Net 2 0 应用程序 在 VS2008 中创建 现在我添加了一个通用返回类型 它给了我以下内容 警告 类型库导出器 遇到泛型类型实例 一个签名 通用代码可能不是 导出到COM 刚刚花了很长时间删除
  • 使用 GUI 和工作线程增强 Asio 模式

    我想使用 GUI 线程和某些套接字 IO 的工作线程来实现 Boost Asio 模式 工作线程将使用boost asio io service管理套接字客户端 套接字上的所有操作将仅由工作线程执行 GUI 线程需要从工作线程发送和接收消息
  • 融合几个接近点的简单方法?

    我有一个这样的点列表 points 57 213878612138828 17 916958304169601 76 392039480378514 0 060882542482108504 0 12417670682730897 1 04
  • Hibernate @LazyCollection 注解有什么用

    我有 2 个实体作为父实体和子实体作为 OneToMany 关系 Entity public class Parent Id GeneratedValue strategy GenerationType AUTO private Integ
  • java 如何知道您是否正在运行 javaw.exe 与 java.exe

    相关以编程方式从 java 代码中查找 java exe 的绝对路径 https stackoverflow com questions 9006127 find absolute java exe path programatically
  • 如何使用 C 捕获另一个进程的输出?

    如何使用纯 C 捕获另一个进程的输出 你能提供示例代码吗 编辑 让我们假设Linux 我会对 相当可移植 的代码感兴趣 我想做的就是执行一个命令 捕获它的输出并以某种方式处理它 有多种选择 但它在一定程度上取决于您的平台 那就是说popen
  • 使用 NPOI,如何返回已由 Excel 格式化的单元格值?

    Using NPOI https npoi codeplex com 是否有任何内置的可能性来格式化单元格值 特别是数字和日期值 因为它已经 如果不是 最好的实施方式是什么 我想到了从 Excel 格式字符串到 C 格式字符串的格式字符串转
  • NodeJS 请求多个 api 端点

    好的 我正在尝试使用请求模块向 API 端点发出两个或多个请求 我正在渲染一个 HTML 文件 并使用以下代码将返回的 JSON 传递到车把模板 res render list html title List data returnedJS
  • 初始化一个包含 List 的 Map

    我需要使用里面有列表的地图 Map