2011-01-09 6 views
2

は一度私のGUI alt textこの状況に最適なデータ構造の選択は何ですか?ユーザーは、分岐するJComboBoxから特定の分岐を選択すると

の一部を見て、私は、データベースを照会し、そのブランチに適用されるすべての年を取得しにそれらの年を追加する必要があります次のJComboBoxの年などです。ユーザーが自分のブランチの選択を入れ替えるチャンスがかなりあります。オプションを変更するたびに同じクエリをデータベースに再度クエリしていることがわかります。データベース内のデータが移動している可能性は非常に低いですこれらの交換の間で変更する....私は私がいくつかのデータ構造にこれらを格納することを決めた、私はそのようなデータ構造のために持っている最良の選択は何ですか? 2〜3つの異なる支店、4〜6年の異なる年などがあります.....
私の最高の選択は何ですか?

+4

「Semister」の代わりに「Semester」 – Nishant

+0

@Nishant yeah right ...... :) – sasidhar

+0

これはextJSやGWTのようなJavaScriptのGUIですか?あなたのDBをクライアントに漏らしているのですか? DBは遅いですか? ORMを使用していますか?あなたは1つを使用する予定ですか? Javaレベルで実行する必要がある複雑なビジネスロジックはありますか?バリデーションはどうですか?私は最高のデータ構造として* "none" *に答えるように誘惑されるでしょう。このような情報のDBコールが遅くなる可能性は非常に低く、データが「変更される可能性は非常に低い」場合* HibernateのようなORMは、これをすべてキャッシュしてくれます。 DBを持っているかどうかは分かりませんが、Javaで複製することは賢明ではありません。 – SyntaxT3rr0r

答えて

2

アプリケーションがシングルスレッドの場合は、HashMapを使用します。 HashMapを「入れ子にする」ことができます。 HashMap<String, HashMap<Integer, HashMap<Integer, HashMap<String, Item>>>>HashMapを反復する方法については、this questionを参照してください。ここで

は、あなたのアイデアを与えるためにちょうど2つのネストを使用していくつかのサンプルコードです:

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

アプリケーションはシングルスレッドであるが、別の年に同じブランチ名をマップするこれらの年を同じ支店と年の異なるセミスターにマッピングしますか?私はこの状況にどのようにHashMapを使用するのかよく分かりませんでしたか?助けてください.. – sasidhar

+0

@Sasidhar私はHashMapsをネストしたところで私の編集を見ましたか?あなたはそのようにすることができます。 – marcog

+0

@marcog thats私が正確に欲しかったことは、コレクションフレームワークとジェネリックタイプを使用するのに慣れていないので、私はそれをよりよく理解できるようにいくつかの例を教えてもらえますか? – sasidhar

3

あなたについての分岐がキーと年間で地図を作成する方法、学期やセクションがVOオブジェクトにありますか? VOの名前がBranchDetailsで、Map<String,BranchDetails>()のようなものを使用できるとします。

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

OPが欲しいのはこれですか?私が理解したように、学期は学期に依存しており、学期に依存しています。誰が正しい? – marcog

+0

@ marcog-その場合、ネストされた各キーをマップして、次の可能な値のセットに導く必要があります。私は彼が探しているものがどれほど正確かはわかりません。 – CoolBeans

+0

ネストされたマップは私が答えたものです。私たちはOPが何を言っているか見るでしょう。 – marcog

1

私は完全なデータを別々のリストにそれらを保つでしょう:

BranchDetailsは、以下のような単純なものである可能性があります。 (彼らは小さいです)。各オブジェクトBranch, Year, Semester, Sectionはneccessaryデータを有する

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

は、別にそれらをリンクします。たとえば、Branchには、実際のデータベース構造(できるだけ早く簡単に初期ローディングを行うために)を可能な限り近くにマッピングするlist of yearIdなどが含まれています。

UIの状態が変更されると、このデータ構造の実際のデータベースクエリが複製され、必要なものが返されます。

+0

私は実際にあなたのアイデアを実際に実装する方法を実際には得られませんでしたが、HashMapがどのように。 – sasidhar

+0

マップアプローチは時々動作します。そして、それがどのように動くかを見るためにそれを行うべきです。私は残念なことにこれをもっと詳しく説明する時間がなかった。 –

関連する問題