如何枚举Hashtable的键和值?

时间:2010-02-07 07:38:10

标签: java hashtable

我有问题;我有一些数据,我用Hashtable显示 例如我写道:

 Enumeration keys;
    keys=CellTraffic_v.elements();
    while(keys.hasMoreElements())
      outputBuffer.append(keys.nextElement()+"\n\n");

但它向我展示了如何将价值观和关键点一起展示给我的价值观? 例如这个

如果我的密钥是“A” 我的价值是“B”告诉我这个:

A  B

谢谢...

3 个答案:

答案 0 :(得分:18)

Hashtable实施MapMap.entrySet函数返回Set个实例的集合(Map.Entry),这些实例具有getKeygetValue方法。

所以:

Iterator<Map.Entry>  it;
Map.Entry            entry;

it = yourTable.entrySet().iterator();
while (it.hasNext()) {
    entry = it.next();
    System.out.println(
        entry.getKey().toString() + " " +
        entry.getValue().toString());
}

如果您知道Hashtable中条目的类型,则可以使用模板消除上面的toString调用。例如,如果您的Hashtable被声明为entry,则Map.Entry<String,String>可以声明为Hashtable<String,String>

如果你可以将模板与泛型组合在一起,那就简短了:

for (Map.Entry<String,String> entry : yourTable.entrySet()) {
    System.out.println(entry.getKey() + " " + entry.getValue());
}

假设yourTableHashtable<String,String>。只是展示了Java在过去几年里走了多远,基本上没有失去其基本的Java-ness。

稍微OT:如果您不需要同步,请使用HashMap代替Hashtable。如果你这样做,请使用ConcurrentHashMap(谢谢,akappa!)。

答案 1 :(得分:8)

你有钥匙吗?使用键从地图中获取值,并且您拥有所有映射。例如,在Java中使用String作为键的类型:

for (String key : map.keySet()) {
    System.out.println(key + ":" + map.get(key));
}

答案 2 :(得分:1)

entrySet()返回Hashtable中值的枚举 keySet()返回Hashtable中键的枚举 entrySet()以条目

的形式返回条目(键和值)
for( Iterator iter=hash.keySet().iterator(); iter.hasNext(); ) {
    String key = (String) iter.next();
    String value = (String) hash.get( key );
}


for( Iteration iter=hash.entrySet().iterator(); iter.hasNext(); ) {
    Map.Entry entry = (Map.Entry) iter.next();
    String key = (String) entry.getKey();
    String value = (String) entry.getValue();
}

或使用泛型,在这种情况下,您的哈希是一个HashMap&lt; String,String&gt;

for( String key : hash.keySet() ) {
    String value = hash.get( key );
}

for( Map.Entry entry : hash.entrySet() ) {
    String key = entry.getKey();
    String value = entry.getValue();
}