如果Set集合声明在for循环代码之外,则Set集合的元素在for循环里,只会被调用一遍,调用完毕后,Set集合就释放掉了,测试代码如下:
object test {
def main(args: Array[String]): Unit = {
val jsonstr = "{\"tag_value\":\"9.0\",\"pay_type\":\"a\"}"
val json = JSONObject.fromObject(jsonstr)
val keys = json.keys()
for (i <- 0 until (4)) {
while (keys.hasNext) {
val key = keys.next()
println("第" + i + "次循环的key为:" + key)
}
}
}
}
------------------------------------------------------
第0次循环的key为:tag_value
第0次循环的key为:pay_type
但是如果把Set集合放到for循环里面,则可多次调用,测试代码如下:
object test {
def main(args: Array[String]): Unit = {
val jsonstr = "{\"tag_value\":\"9.0\",\"pay_type\":\"a\"}"
val json = JSONObject.fromObject(jsonstr)
for (i <- 0 until (4)) {
val keys = json.keys()
while (keys.hasNext) {
val key = keys.next()
println("第" + i + "次循环的key为:" + key)
}
}
}
}
------------------------------------------------------
第0次循环的key为:tag_value
第0次循环的key为:pay_type
第1次循环的key为:tag_value
第1次循环的key为:pay_type
第2次循环的key为:tag_value
第2次循环的key为:pay_type
第3次循环的key为:tag_value
第3次循环的key为:pay_type
猜测原因是,keySet集合用迭代器遍历时,迭代器在调用的时候只生效一次,然后就释放掉了,所以第二次调用的时候,迭代器keys就没有hashNext了,也就根本不会继续走while循环了。