如何枚举Hashtable的键和值?

Fre*_*man 7 java hashtable

我有个问题 ; 我有一些数据,我用Hashtable 例如我写的:

 Enumeration keys;
    keys=CellTraffic_v.elements();
    while(keys.hasMoreElements())
      outputBuffer.append(keys.nextElement()+"\n\n");
Run Code Online (Sandbox Code Playgroud)

但它只是告诉我价值如何能够将价值观和关键点展示在一起?例如这个

如果我的钥匙是"A"而我的价值是"B",请告诉我:

A  B
Run Code Online (Sandbox Code Playgroud)

谢谢 ...

T.J*_*der 18

Hashtable实施Map.该Map.entrySet函数返回一个具有和方法SetMap.Entry实例的collection().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());
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

假设yourTable是一个Hashtable<String,String>.只是展示了Java在过去几年里走了多远,基本上没有失去其必要的Java-ness.

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

  • 即使您需要同步,也可以使用ConcurrentHashMap. (2认同)

cru*_*dog 8

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

for (String key : map.keySet()) {
    System.out.println(key + ":" + map.get(key));
}
Run Code Online (Sandbox Code Playgroud)

.

  • 这很昂贵.Crowder的解决方案要好得多. (2认同)
  • 如果map是HashMap,则两个解决方案可能都是O(n),但如果map是TreeMap,则此解决方案是O(n log(n)),而条目集版本可能仍然只是O( N). (2认同)