这种情况下最佳数据结构的选择是什么?

时间:2011-01-09 16:32:05

标签: java data-structures collections

看一下我的GUI部分 alt text

一旦用户从分支JComboBox中选择一个特定分支,我就必须查询数据库并获得适用于该分支的所有年份,并将这些年份添加到下一个JComboBox年份,依此类推。用户有很多机会在他选择的分支之间进行交换,我会发现自己每次更改选项时都会再次向数据库查询相同的查询,并且数据库中的数据极不可能发生在这些交换之间进行更改....所以我决定将这些存储在一些数据结构中,对于一个这样的数据结构,我有什么最好的选择?可能有2到3个不同的分支,4到6个不同年份等等.....
什么是我最好的选择?

3 个答案:

答案 0 :(得分: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 :(得分: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>());

答案 2 :(得分:1)

我会将它们保存在包含完整数据的单独列表中。 (他们很小)。

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

其中每个对象Branch, Year, Semester, Section都有必要的数据将它们链接到另一个对象。例如,Branch可以包含list of yearId等映射,尽可能接近实际的数据库结构(使初始加载变得快速而简单)。

在UI中进行状态更改后,您只需复制此数据结构上的实际数据库查询并返回所需内容。