android 开发时遇到的各种问题2--ConcurrentModificationException
2013-07-29 17:43
351 查看
/**
* Iterator是工作在一个独立的线程中,并且拥有一个 mutex锁,就是说Iterator在工作的时候,是不允许被迭代的对象被改变的。
* Iterator被创建的时候,建立了一个内存索引表(单链表),这 个索引表指向原来的对象,当原来的对象数量改变的时候,这个索引表的内容没有同步改变,所以当索引指针往下移动的时候,便找不到要迭代的对象,于是产生错误。
* List、Set等是动态的,可变对象数量的数据结构,但是Iterator则是单向不可变,只能顺序读取,不能逆序操作的数据结构,当 Iterator指向的原始数据发生变化时,Iterator自己就迷失了方向。
*
* 故:將Set转换成List,通过索引的方式访问,用以解决ConcurrentModificationException
*/
List<String> list = new ArrayList<String>();
list.addAll(set);
for (int i = 0; i < list.size(); i++) {
String key = list.get(i);
List<RelationshipBean> relationList = mMobileRelationshipMap.get(key);
for(RelationshipBean relation : relationList){
if ( Config.getUser().isBind(relation.sns_type) ) {
map.put(relation.sns_id, relation);
}
}
}
总结:用Iterator 或者增强for循环遍历时,不能修改数据。用索引遍历的时候,也要注意大小的改变,位置的变化。
* Iterator是工作在一个独立的线程中,并且拥有一个 mutex锁,就是说Iterator在工作的时候,是不允许被迭代的对象被改变的。
* Iterator被创建的时候,建立了一个内存索引表(单链表),这 个索引表指向原来的对象,当原来的对象数量改变的时候,这个索引表的内容没有同步改变,所以当索引指针往下移动的时候,便找不到要迭代的对象,于是产生错误。
* List、Set等是动态的,可变对象数量的数据结构,但是Iterator则是单向不可变,只能顺序读取,不能逆序操作的数据结构,当 Iterator指向的原始数据发生变化时,Iterator自己就迷失了方向。
*
* 故:將Set转换成List,通过索引的方式访问,用以解决ConcurrentModificationException
*/
List<String> list = new ArrayList<String>();
list.addAll(set);
for (int i = 0; i < list.size(); i++) {
String key = list.get(i);
List<RelationshipBean> relationList = mMobileRelationshipMap.get(key);
for(RelationshipBean relation : relationList){
if ( Config.getUser().isBind(relation.sns_type) ) {
map.put(relation.sns_id, relation);
}
}
}
总结:用Iterator 或者增强for循环遍历时,不能修改数据。用索引遍历的时候,也要注意大小的改变,位置的变化。
相关文章推荐
- android 开发时遇到的各种问题1--Android双模(CDMA/GSM)手机短信相关
- AndroidStudio遇到的java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessExce问题
- Android遇到的各种问题(一)——开发中Theme.AppCompat.Light的解决方法
- android讯飞语音开发常遇到的问题 各种错误编码说明
- Android开发中遇到的各种问题?
- android 2D游戏开发,引擎设计(五) 扮演者追加扮演者BUG ConcurrentModificationException
- Android|Java 开发中的那些坑 ConcurrentModificationException
- android开发中遇到的各种问题收集--不定期更新
- 举例说明Android开发中遇到的 java.lang.ClassCastException: java.lang.String这个问题的原因及其解决办法
- AndroidStudio遇到的java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessExce问题
- 一个android项目开发遇到的各种小问题(一)
- Ubuntu 下android 开发遇到的各种问题
- android开发中遇到的问题解决之RelativeLayout执行measure(w,h)方法时,出现NullPointerException的异常情况
- Intellij IDEA开发Android遇到的各种问题(不定时更新。。)
- Android相机开发中遇到的一些问题
- Android 开发使用Android studio 遇到的问题汇总
- Eclipse 开发Android小程序遇到的问题总结
- Android混合(Hybrid)开发遇到问题备份
- 【多媒体开发】Android视频全屏录制遇到的一些问题
- android开发中经常遇到的问题汇总