kev*_*inl 2 java android iterator hashmap
我目前有以下代码
while (!visibleTiles.isEmpty())) {
tile = visibleTiles.keySet().iterator().next();
if (tile != null){
bitmap = visibleTiles.remove(tile);
if(bitmap != null && !containsKey(tile)){ //safe to recycle if tile cache is not actively holding it
bitmap.recycle();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我在网上遇到了NoSuchElementException崩溃
tile = visibleTiles.keySet().iterator().next();
Run Code Online (Sandbox Code Playgroud)
使用isEmpty()方法和调用hasNext()调用有很大区别吗?我知道哈希图没有hasNext()调用,所以我做了以下工作:
while (visibleTiles.keySet().iterator().hasNext()) {
tile = visibleTiles.keySet().iterator().next();
if (tile != null){
bitmap = visibleTiles.remove(tile);
if(bitmap != null && !containsKey(tile)){ //safe to recycle if tile cache is not actively holding it
bitmap.recycle();
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,我知道我应该只运行该应用程序,看看它是否崩溃,但是问题是很难重现该问题。
谢谢!
visibleTiles.isEmpty()
只需检查map是否为空(或)它是否包含任何元素。
ile = visibleTiles.keySet().iterator().next();
Run Code Online (Sandbox Code Playgroud)
从迭代器中检索下一个元素。
您需要hasNext()在进行next()迭代器之前进行检查。
hasNext() javadoc说
如果迭代具有更多元素,则返回true。(换句话说,如果next将返回一个元素而不是引发异常,则返回true。)
因此,如果没有可用的元素,则next()对iterator的调用将返回NoSuchElementException。
最重要的是,我认为您真的想不要清空支票
while (!visibleTiles.isEmpty())) {
....
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12770 次 |
| 最近记录: |