2012-07-09 36 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