【问题标题】:Multi Layered Hashmap and Arraylist多层 Hashmap 和 Arraylist
【发布时间】:2014-01-06 03:24:19
【问题描述】:

我正在开发一个 java 程序,它接受一个字符串并将其拆分为不同的级别。

Map<String, ArrayList<Map<String, ArrayList<Map<String,Map<String, String>>>>>> courseInfoMap = new HashMap<String, ArrayList<Map<String,ArrayList<Map<String,Map<String, String>>>>>>();
ArrayList<Map<String, ArrayList<Map<String,Map<String, String>>>>> courseNumList = new ArrayList<Map<String, ArrayList<Map<String,Map<String, String>>>>>();
Map<String, ArrayList<Map<String,Map<String, String>>>> courseNumTextbookMap = new HashMap<String, ArrayList<Map<String,Map<String, String>>>>();
ArrayList<Map<String,Map<String, String>>> listOfTextbooks = new ArrayList<Map<String,Map<String,String>>>();

Map<String, Map<String, String>> textbookMap = new HashMap<String, Map<String, String>>();
Map<String, String> isbnMap = new HashMap<String,String>();

基本上, 我正在尝试拥有课程代码->课程编号列表->课程编号(键)->教科书列表->教科书-> isbn编号(str)->价格

因此,因为某些课程代码有多个课程编号,它指向一个数组列表。

我一直在向后添加东西,所以在循环中循环。假设我没有搞砸那里。我一直在尝试以相同的方式循环遍历元素,假设它们可能已被添加。

for(Map.Entry<String, ArrayList<Map<String, ArrayList<Map<String,Map<String, String>>>>>> entry : courseInfoMap.entrySet()){
        System.out.println(entry.getKey());// COURSE CODE

        for(int i = 0; i < entry.getValue().size();i++){//loops through arraylist of course numbers
            System.out.println("i("+i+" - " + entry.getValue().get(i));

            for(Map.Entry<String, ArrayList<Map<String,Map<String,String>>>> entry2 : entry.getValue().get(i).entrySet()){
                System.out.println("   " + entry2.getKey());
                // . . . and so on

这并没有奏效,它只是循环遍历所有内容。在每个级别上。

我的问题是如何浏览大量的哈希图和/或有更好的方法来做到这一点。

例子:

AAAA
     100
        Name
        ###
        $$$

        Name
        ###     <-- different from past
        $$$
     200 
        Name
        ###
        $$$
  BBBB
      101
        Name
        ###
        $$$

【问题讨论】:

  • 不要用这么多的嵌套级别伤害自己。在类中封装和结构化您的数据。

标签: java arraylist hashmap


【解决方案1】:

这似乎非常复杂,坦率地说,如果我不得不坚持这一点,我真的不会期待它。在我的脑海中,您可能还可以采取其他几种方法...

使用关系数据库

内存数据库或类似 mysql 或 postgresql 的数据库。它们专为这类事情而设计 - 组织数据并允许临时查询。

将您的数据放入对象中

而不是地图和列表,只需创建一个在一个地方定义大部分内容的对象。将 that 对象存储在 List 或 Map 中,然后直接搜索您需要的内容。如果您没有太多数据,那么在挂钟时间内,蛮力未索引的搜索可能不会那么糟糕。

【讨论】:

  • 确实如此。我没有看到我面前的东西(物体)。谢谢。
猜你喜欢
  • 2016-11-04
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 2017-08-14
  • 2014-03-30
相关资源
最近更新 更多