2011-01-09 60 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中改变状态,你只需在这个数据结构上复制实际的数据库查询并返回你所需要的。

相关问题