【发布时间】:2011-09-26 21:01:12
【问题描述】:
目前有这个实现:
static Map s_AvailableGameTables = Collections.synchronizedMap(new TreeMap<Integer,Table>());
如何像数组一样从头到尾遍历它的所有内容?
谢谢
【问题讨论】:
目前有这个实现:
static Map s_AvailableGameTables = Collections.synchronizedMap(new TreeMap<Integer,Table>());
如何像数组一样从头到尾遍历它的所有内容?
谢谢
【问题讨论】:
假设声明是
static Map<Integer,Table> s_AvailableGameTables = Collections.synchronizedMap(new TreeMap<Integer,Table>());
(不仅仅是Map)
以下将遍历所有键/值对:
for (Map.Entry<Integer,Table> e : s_AvailableGameTables.entrySet())
{
int key = e.getKey();
Table tbl = e.getValue();
}
【讨论】:
s_AvailableGameTables 只是一个未参数化的Map,那么您不能按原样编写代码以进行迭代。编译器将假定Map<?,?> 为类型,然后entrySet() 方法返回值将与for 语句中的声明不兼容。你可以通过强制转换来解决这个问题,但这就是泛型应该消除的。
如果要遍历条目(映射中的键值对):
for (Map.Entry<Integer, Table> entry : s_AvailableGameTables.entrySet()) {
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
}
【讨论】:
Map 来声明变量s_AvailableGameTables,而必须使用类型参数声明它:static Map<Integer, Table> s_AvailableGameTables,正如 Jim 在他的回答中所说。见tutorial about generics。