Каков выбор наилучшей структуры данных для этой ситуации? - PullRequest
2 голосов
/ 09 января 2011

Однажды взгляните на часть моего графического интерфейса alt text

Как только пользователь выбирает конкретную ветку из ветви JComboBox, мне нужно запросить базу данных и получить все годы, применимые к этой ветке, и добавить эти годы к следующему году JComboBox и так далее. У пользователя довольно мало шансов переключиться между выбором ветки, и я бы обнаружил, что снова и снова запрашивал у базы данных один и тот же запрос каждый раз, когда он меняет свой вариант, и весьма маловероятно, что данные в базе данных собираются поменять местами между этими перестановками .... Итак, я решил сохранить их в какой-то структуре данных. Какой лучший выбор у меня есть для одной такой структуры данных? может быть от 2 до 3 разных веток, от 4 до 6 разных лет и тд .....
Какой мой лучший выбор?

Ответы [ 3 ]

3 голосов
/ 09 января 2011

Как насчет создания карты, в которой ключ - это ветвь, а годы, семестры и разделы - в объекте VO?Давайте предположим, что VO называется BranchDetails, тогда вы можете использовать что-то вроде Map<String,BranchDetails>().

BranchDetails может быть таким простым, как показано ниже:

class BranchDetails{
   List<Integer> years;
   List<Integer> semesters;
   List<Integer> sections;
   //getters and setters omitted for brevity 
}
2 голосов
/ 09 января 2011

Если приложение однопоточное, используйте HashMap. Вы можете "вкладывать" HashMap s, например HashMap<String, HashMap<Integer, HashMap<Integer, HashMap<String, Item>>>>. См. этот вопрос , чтобы узнать, как перебрать 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>());
1 голос
/ 09 января 2011

Я бы просто держал их в отдельных списках с полными данными. (они маленькие).

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

, где каждый объект Branch, Year, Semester, Section имеет необходимые данные, чтобы связать их с другим. Например, Branch может содержать list of yearId и т. Д., Максимально точно отображающие фактическую структуру базы данных (чтобы сделать начальную загрузку быстрой и простой).

Имея это после изменения состояния в пользовательском интерфейсе, вы просто копируете фактический запрос к базе данных в этой структуре данных и возвращаете то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...