java - HashMap 中的内容适当的数据

2024-01-11

想象一下您有一本学生评价日记。每个学生在日记中都有每个科目的分数。我想将其存储在HashMap<>但我不明白为什么标记会合并。

在期刊课上:

public class Journal {
    private static HashMap<String, HashMap<String, ArrayList<Integer>>> journal = new HashMap<>(); // "Student" -> "Subject", mark[]

    private HashMap<String, ArrayList<Integer>> journalContainer = new HashMap<>();
    private ArrayList<Integer> marks = new ArrayList<>();

    public void addMark(String student, String subject, int mark) {
        marks.add(mark);
        journalContainer.put(subject, mark);
        journal.put(student, journalContainer);
    }

    public static void outputMarks() {
        for(HashMap.Entry<String, HashMap<String, ArrayList<Integer>>> entry : journal.entrySet())
        {
            System.out.println(entry.getKey() + "/" + entry.getValue());
        }
    }
}

在主课中:

public class Main {
    public static void main(String[] argc) {
        getJournal().addMark("Alex", "math", 4); // name, subject, mark
        getJournal().addMark("Alex", "math", 2);
        getJournal().addMark("George", "english", 2);
        getJournal().addMark("George", "english", 2);

        Journal.outputMarks();
    }
}

所以输出是:

Alex/{english=[4, 2, 2, 2], math=[4, 2, 2, 2]}
George/{english=[4, 2, 2, 2], math=[4, 2, 2, 2]}

但正确的输出应该是:

Alex/{math=[4, 2]}
George/{english=[2, 2]}

我不明白我做错了什么。有人可以帮忙吗?


问题是你有一个marks = new ArrayList<>();你在所有内在的价值观中使用的实例Maps,以及单个journalContainer = new HashMap<>();您在外部用作值的实例Map.

我会删除这两个实例变量,并使用局部变量。

你应该使用不同的ArrayLists 和内部HashMaps 作为你的价值观Maps:

public void addMark(String student, String subject, int mark) {
    HashMap<String, ArrayList<Integer>> journalContainer = journal.get(student);
    if (journalContainer == null) {
        journalContainer = new HashMap<>();
        journal.put(student,journalContainer);
    }
    ArrayList<Integer> marks = journalContainer.get(subject);
    if (marks == null) {
        marks = new ArrayList<>();
        journalContainer.put(subject, marks);
    }
    marks.add(mark);
}

顺便说一句,拥有一个修改静态成员的实例方法是没有意义的(journal Map)。要么使该方法静态,要么使Map非静态。

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

java - HashMap 中的内容适当的数据 的相关文章

随机推荐

  • 哪里可以下载 eclipse 4.4 的 google 插件?

    谷歌的一些服务在这里被屏蔽 我无法从更新站点安装谷歌的插件 那么在哪里下载eclipse 4 4的插件存档 目前 谷歌的官方网站只提供4 3的存档 干得好 http dl google com eclipse plugin core 4 4
  • iOS 如何处理 URL 方案重复?

    如果另外 2 个应用程序注册相同的 url 方案 iOS 如何处理这个问题 The iOS 文档 http developer apple com library ios documentation iPhone Conceptual iP
  • 调试测试时使用 DatabaseManager 连接到内存 Hsql(高超音速)数据库

    我想在 IDE Intellij IDEA 11 1 2 中调试测试时使用 hsql DatabaseManager 或 swing 版本 这并不重要 连接到内存中的 HSQL 数据库实例 我已经按照建议尝试过这个答案 https stac
  • 在 C# 中显示带有 alpha 通道的 PNG

    有没有办法在 C 应用程序中正确显示带有 alpha 通道的图像 比如说 PNG 感谢您的任何建议 UPDATE 好吧 我的问题有点不准确 我想获得 Alpha 通道的真正透明度 不填充父级的背景颜色 在下图中我们可以看到支持透明度 但按钮
  • Objective C 类别的实例变量

    我遇到的情况是 我似乎需要将实例变量添加到类别中 但我从 Apple 的文档中知道我不能这样做 所以我想知道最好的替代方案或解决方法是什么 我想要做的是添加一个类别 为 UIViewControllers 添加功能 我会发现它在我所有不同的
  • 在大型分箱数据集上使用“ggplot”时出现内存泄漏

    我正在制作各种ggplot在非常大的数据集上 比示例大得多 我在 x 轴和 y 轴上创建了一个分箱函数 以便能够绘制如此大的数据集 在下面的示例中 memory size 是在开始时记录的 然后将大数据集模拟为dt dt s x2是针对x1
  • SQL Server 的自定义处理器 + DBCPConnectionPool:未加载驱动程序 jar

    I have created a controller service to connect to a test db 我有一个自定义处理器 可以从 SQL Server 读取数据 模拟测试 构建和部署到 NiFi 都成功 处理器遇到错误
  • PHP 5.5.X 及更高版本中是否需要再使用 & 符号?

    我到处都收到混合信号 我是否使用 符号通过引用传递变量 以下链接似乎告诉我它已被弃用并且不再需要 http gtk php net manual en html tutorials tutorials changes references
  • 我可以将 LayoutPrams 与 ViewGroup.addView 一起重复使用吗?

    Does ViewGroup addView clones LayoutParams数据放到里面还是链接到呢 我可以重用同一个实例吗LayoutParams多次调用addView 有不同的看法吗 apidoc 中没有任何相关内容 WOW 答
  • 压缩后的位图质量=比原始文件大小大 100 倍

    我正在尝试将图像发送到服务器 在发送之前 我会减小其大小和质量 然后解决任何旋转问题 我的问题是 旋转图像后 当我保存它时 文件比以前大 旋转前大小为 10092 旋转后大小为 54226 Scale image to reduce it
  • 表值函数和实体框架

    我正在尝试使用实体框架执行 TVF 但由于某种原因它不起作用 也许那里的任何人都可以帮助我解决这个问题 以下是代码示例 这就是函数 CREATE FUNCTION dbo udf profileSearch keywords NVARCHA
  • Kotlin:创建自定义 CoroutineContext

    我在 API 后端使用 Kotlin 我不想在中运行数据库查询common pool 基本上 我想创建一个CoroutineContext有许多与数据库匹配的线程maximumPoolSize 完成此任务的最佳方法是什么 一般情况下以及针对
  • 为什么有些项目的 use 子句接受 Jpeg,而其他项目则需要 vcl.imaging.jpeg?

    我正在将一些项目更新到 XE2 但我不明白为什么在某些项目上 uses jpeg 被接受 在其他方面我需要写 uses vcl imaging jpeg 你能给我解释一下吗 差异在于各个项目的项目选项中的单元范围名称设置 如果你有Vcl I
  • 如何用单斜杠替换特殊字符

    我有一个关于 Java 中字符串的问题 比方说 我有一个像这样的字符串 String str The startup trace state is info 由于字符串包含特殊字符 例如 我需要将字符串替换为 根据我的要求 如何替换特殊字符
  • R {targets} 包:如何使用字符串引用现有目标?

    我正在使用 targets 包 尝试根据现有目标创建新目标 虽然通过以 NSE 样式键入名称来引用现有目标很简单 但通过使用字符串作为 别名 却无法做到这一点 只是为了清楚我在说什么 我会表明我的意思outside the targets
  • 在 DatePickerDialog 中以数字格式而不是字母顺序显示月份字段

    下图显示了我在 Android 应用程序中的当前日期选择器 但是我想将所有月份显示为 01 02 03 12 而不是一月 二月 三月 十二月 任何帮助将不胜感激 你可以自己设计Dialog with NumberPicker 但如果你仍然想
  • Symfony 一次性实例化一项服务并与多个用户一起使用

    我正在尝试做一项仅实例化一次的服务 然后当新用户访问我的主页时 我可以在需要时重新使用它 我想做的是一个实例化后设置日期时间的服务 当任何用户连接到我的主页时 我会向我的服务发送一个日期时间 然后比较两个日期时间 实例化服务时的日期时间和用
  • 将 AWS API Gateway API 端点的 IP 列入公司防火墙中的白名单

    我已经构建了一个 AWS API Gateway API 端点 该端点将被我公司网络中的一台机器命中 以每隔一定时间间隔发布数据 但是 当我通过 Postman 从办公室网络尝试它时 办公室防火墙会阻止它 但是当我使用移动热点 其他 wif
  • 分配变量并显示结果

    我收到 T ECHO 意外错误 完成上述任务的正确方法是什么 我稍微扩展一下这个问题 这是一段 wordpress 代码 get option 函数不回显该值 所以我尝试了
  • java - HashMap 中的内容适当的数据

    想象一下您有一本学生评价日记 每个学生在日记中都有每个科目的分数 我想将其存储在HashMap lt gt 但我不明白为什么标记会合并 在期刊课上 public class Journal private static HashMap