2011-01-09 64 views
2

一旦用戶選擇從該分支的JComboBox特定分支一旦看看我的GUI alt text這種情況下最佳數據結構的選擇是什麼?

的一部分,我必須查詢數據庫並獲得所有適用於分支多年,這些年增加下一個JComboBox年等等。用戶在他選擇的分支之間有很大的交換機會,並且每當他改變他的選項時,我都會再次查詢數據庫,並且數據庫中的數據發生的可能性很小在這些交換之間改變......所以我決定將這些存儲在一些數據結構中,對於這樣的數據結構我有什麼最佳選擇?可能有2到3個不同的分支,4到6個不同的年份等.....
我最好的選擇是什麼?

+4

不相關:它應該是「學期」,而不是「Semister」 – Nishant 2011-01-09 16:47:38

+0

@Nishant是啊,正確...... :) – sasidhar 2011-01-09 18:01:06

+0

這是一個JavaScript的GUI,如extJS或GWT?你的數據庫泄露給客戶一個問題?數據庫很慢?你在使用ORM嗎?你打算使用一個嗎?是否有任何複雜的業務邏輯需要在Java級別上完成?驗證呢?我會試圖回答*「無」*作爲最好的數據結構。數據庫調用這些信息的速度似乎不太可能,如果數據*「極不可能改變」*,那麼像Hibernate這樣的ORM將非常輕鬆地爲您緩存所有這些信息。要麼你有一個數據庫,但用Java複製它並不聰明。 – SyntaxT3rr0r 2011-01-09 18:37:42

回答

2

如果應用程序是單線程的,請使用HashMap。您可以「嵌套」HashMap,例如HashMap<String, HashMap<Integer, HashMap<Integer, HashMap<String, Item>>>>。請參閱this question以瞭解如何迭代HashMap

下面是僅使用兩個嵌套給你的想法一些示例代碼:

HashMap<String, HashMap<Integer, HashMap<Integer, HashMap<String, String>>>> map1 = new HashMap<String, HashMap<Integer, HashMap<Integer, HashMap<String, String>>>>(); 
map1.put("Computers", new HashMap<Integer, HashMap<Integer, HashMap<String, String>>>()); 
map1.get("Computers").put(2011, new HashMap<Integer, HashMap<String, String>>()); 
map1.get("Computers").get(2011).put(2, new HashMap<String, String>()); 
3

如何創建一個貼圖,分支是關鍵,多年來,學期,部分是在VO對象?假設VO名爲BranchDetails,那麼您可以使用類似Map<String,BranchDetails>()的東西。

BranchDetails可能是這麼簡單的東西如下:

class BranchDetails{ 
    List<Integer> years; 
    List<Integer> semesters; 
    List<Integer> sections; 
    //getters and setters omitted for brevity 
} 
1

,我只想讓他們在不同的列表與完整的數據。 (他們很小)。

List<Branch> branches; 
List<Year> years; 
List<Semester> semesters; 
List<Section> sections; 

,其中每個對象Branch, Year, Semester, Section具有neccessary數據將其鏈接到另一個。例如Branch可能包含一個list of yearId等映射儘可能接近實際的數據庫結構(使初始加載快速和容易)。

一旦你在UI中改變狀態,你只需在這個數據結構上覆制實際的數據庫查詢並返回你所需要的。

相關問題