多层Hashmap和Arraylist

时间:2014-01-06 03:24:20

标签: java arraylist hashmap

我正在开发一个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>();

基本上, 我想要一个课程代码 - &gt;课程列表num - &gt;课程num(key) - &gt;教科书清单 - &gt;教科书 - &gt; isbn number(str) - &gt;价

因为有些课程代码有多个课程编号,所以它指向一个arraylist。

我一直在向后添加内容,因此循环中的循环。假设我没有搞砸那里。假设它们可能被添加,我一直试图以相同的方式遍历元素。

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
        ###
        $$$

1 个答案:

答案 0 :(得分:3)

这看起来非常复杂,坦率地说,如果我必须坚持认为我真的不期待它。我可以采取其他几种方法......

使用关系数据库

内存数据库或mysql或postgresql之类的东西。它们是为这类事物而设计的 - 组织数据并允许进行临时查询。

将数据放入对象

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