2014-01-06 79 views
3

我正在研究一個接受字符串並將其分成不同層次的java程序。多層HashMap和Arraylist

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>(); 

從本質上講, 我想有一個課程代碼 - >當然NUM列表 - >當然NUM(鍵) - >教材列表 - >教科書 - >國際標準書號( str) - >價格

因此,因爲某些課程代碼有多個課程編號,它指向一個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 

這沒有奏效,它只是循環遍歷所有東西。在每個級別上。

我的問題是我如何瀏覽大量的hashmaps和/或有沒有更好的方法來做到這一點。

例子:

AAAA 
    100 
     Name 
     ### 
     $$$ 

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

不要因爲這麼多的嵌套關卡而傷害自己。在類中封裝和構建數據。 –

回答

3

這似乎是非常複雜的,坦率地說,如果我必須保持我真的不看會期待吧。把我的頭頂部有你也許可以採取其他幾種方法...

使用關係數據庫

無論是在內存中的數據庫或類似MySQL或PostgreSQL。他們專爲這種事情設計 - 組織數據並允許臨時查詢。

把你的數據對象

相反地圖和列表,只需創建一個定義在一個地方大部分的對象。在列表或地圖中存儲對象,並直接搜索您需要的內容。如果你沒有太多的數據,那麼一個蠻力的無索引搜索在掛鐘時間可能不會那麼糟糕。

+0

這是真的。我沒有看到什麼是正確的在我面前(對象)。謝謝。 – Keith