我正在开发一个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
###
$$$
答案 0 :(得分:3)
这看起来非常复杂,坦率地说,如果我必须坚持认为我真的不期待它。我可以采取其他几种方法......
使用关系数据库
内存数据库或mysql或postgresql之类的东西。它们是为这类事物而设计的 - 组织数据并允许进行临时查询。
将数据放入对象
只需创建一个在一个位置定义大部分对象的对象,而不是地图和列表。将对象存储在列表或地图中,直接搜索您需要的内容。如果您没有太多数据,那么在挂钟时间内进行蛮力无法索引的搜索可能不会那么糟糕。