Java 如何枚举哈希表的键和值?
我有个问题;我有一些数据,我用Java 如何枚举哈希表的键和值?,java,hashtable,Java,Hashtable,我有个问题;我有一些数据,我用Hashtable 例如,我写: Enumeration keys; keys=CellTraffic_v.elements(); while(keys.hasMoreElements()) outputBuffer.append(keys.nextElement()+"\n\n"); 但它只显示值我怎么能同时显示值和键呢? 比如这个 如果我的钥匙是“A” 我的值是“B”,告诉我: A B 谢谢…entrySet()返回哈希表中值
Hashtable
例如,我写:
Enumeration keys;
keys=CellTraffic_v.elements();
while(keys.hasMoreElements())
outputBuffer.append(keys.nextElement()+"\n\n");
但它只显示值我怎么能同时显示值和键呢?
比如这个
如果我的钥匙是“A”
我的值是“B”,告诉我:
A B
谢谢…entrySet()返回哈希表中值的枚举。keySet()返回哈希表中键的枚举。
entrySet()以集合的形式返回条目(键和值) 或者使用泛型,在这种情况下,您的hash是一个HashMap
你有钥匙对吗?使用键从映射中获取值,您就拥有了所有映射。例如,在Java中,字符串作为键的类型:
for (String key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
。函数返回
Map.Entry
实例的集合(Set
),这些实例具有getKey
和getValue
方法
因此:
假设yourTable
是一个Hashtable
。这只是为了说明Java在过去几年中取得了多大的进步,基本上没有失去其基本的Java特性
轻微OT:如果不需要同步,请使用
HashMap
而不是Hashtable
。如果需要,请使用(谢谢,akappa!)。我知道,但我想将它们一起显示,例如System.out.println(key+value);更好的标题可能是:如何枚举Hashtable@Lachlan:是的@OP:冒昧地改变了它。这是昂贵的。克劳德的解决方案要好得多。@akappa:这种方法究竟在哪些方面成本更高?这两种解决方案都会迭代键值对集合。在您的解决方案中,您会对每次迭代进行查找,而在entrySet解决方案中,您根本不会进行查找。而且您知道entrySet()方法的实现不会对每个键值对进行查找吗?据我所知,这两种方法都有O(n)复杂度。如果map是HashMap,则两种解决方案很可能都是O(n),但如果map是树映射,则此解决方案是O(n log(n)),而条目集版本可能仍然只是O(n)。即使需要同步,也可以使用ConcurrentHashMap。@akappa:ooooooooh,不错@OP:参考:
for( String key : hash.keySet() ) {
String value = hash.get( key );
}
for( Map.Entry entry : hash.entrySet() ) {
String key = entry.getKey();
String value = entry.getValue();
}
for (String key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
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());
}
for (Map.Entry<String,String> entry : yourTable.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}