2012-07-09 39 views
1

我正在爲程序使用多個散列表,即table1 table2 table3等。每個表都有3個鍵值對。這些鍵與不同的值相同。 現在在我的程序的UI中,我有一個comobobox從用戶中選擇表名。一旦選中,我將它存儲在一個變量中,並希望使用此變量來打開相應的表。使用變量調用散列表

感謝Eric Coolman爲this piece我已經在這裏編輯我的查詢。

Hashtable table1 = new Hashtable(); 

table1 .put("COL1", Double.toString(dvalue1)); 
table1 .put("COL2", value2); 
table1 .put("COL3", value3); 

Hashtable table2 = new Hashtable(); 

table2 .put("COL1", Double.toString(dvalue4)); 
table2 .put("COL2", value5); 
table2 .put("COL3", value6); 

// reading that value back: 

double dvalue1 = Double.parseDouble((String)table1.get("COL1")); 
double value6= Double.parseDouble((String)table2.get("COL3"));` 

這裏如何使用變量而不是table1和table2?語法是什麼。我是新來的Java。

+0

你想擁有一組哈希表嗎? – Misch 2012-07-09 11:35:32

+1

對初學者的常見建議:**不要使用HashTable **,它自從Java 1.2以來就有了遺留的狀態。改爲使用'HashMap'。 – 2012-07-09 11:52:23

+0

我想我的問題仍然沒有答案。如果,String var = table1;那麼如何使用'var'而不是'table1'。 – 2012-07-09 13:36:42

回答

4

首先,你的結構看起來你是在object denial:你有什麼作爲Hashtable對象也許應該有3個字段的自定義類型的對象(col1col2col3;或者說更易讀的版本)。

下一頁:可以簡單地使用第三可變接通哪個對象讀取:

Hashtable readFromMe; 
if (someCondition) 
    readFromMe=table1; 
else 
    readFromMe=table2; 

Object o = readFromMe.get("COL3"); 

此代碼將從table1讀如果someConditiontrue,並從table2否則。

此外,上面代碼的前5行的縮短版本將是Hashtable readFromMe = someCondition ? table1 : table2;

+0

甚至更​​短:'(someCondition?table1:table2).get(「COL3」);':) – 2012-07-09 11:50:54

+0

@MarkoTopolnik:是的,它更短,但我認爲這是一個少點可讀性,特別是對於初學者來說,它可能很難理解(它們傾向於用於調用變量而不是任意表達式的方法)。 – 2012-07-09 12:10:59

+0

@ Sauer:謝謝,但是我有超過6個這樣的表,因此我希望有一個可變地址的哈希表名稱。@ Topolnik:我使用代號1來開發我學習的應用程序,但它尚不支持hashmaps。因此使用。 – 2012-07-09 12:17:18

1

將你的兩個表放在另一個散列表中,並使用該鍵訪問你想要的表。

Hashtable<String, Hashtable> tables = new Hashtable<String, Hashtable>(); 
Hashtable<String, String> table1 = new Hashtable<String, String>(); 

table1 .put("COL1", Double.toString(dvalue1)); 
table1 .put("COL2", value2); 
table1 .put("COL3", value3); 

tables.put("table1", table1); 


Hashtable<String, String> table2 = new<String, String> Hashtable(); 

table2 .put("COL1", Double.toString(dvalue4)); 
table2 .put("COL2", value5); 
table2 .put("COL3", value6); 

tables.put("table2", table2); 

// reading that value back: 

double dvalue1 = Double.parseDouble(tables.get("table1").get("COL1")); 
double value6= Double.parseDouble(tables.get("table2").get("COL3"));` 
+0

謝謝你。我有一個查詢使用嵌套的哈希表,你問我之前回答。但由於我有超過6/7的表,我想知道哈希表名稱是否可以從變量中調用。 – 2012-07-09 12:20:51

+0

我沒有得到這個「如果哈希表名稱可以從變量中調用」? – 2012-07-09 12:29:06

+0

我的意思是使用一個字符串變量來調用相關的散列表。正如我所說,我有我的用戶界面選擇表中的comobobox。我可以將此選擇存儲在字符串變量中,然後使用此變量調用相關表以獲取鍵值對。 – 2012-07-09 12:35:03