美文网首页
ArrayMap如何遍历删除元素

ArrayMap如何遍历删除元素

作者: 假面骑士阿盐 | 来源:发表于2018-11-15 20:06 被阅读0次
一句话快速总结: 通过arrayMap.entrySet().iterator()方法拿到迭代器来遍历.

正文: 一开始,我用了for循环遍历去删除,这样当然会出现漏删的元素。
于是我通过keySet来遍历,但在执行arrayMap.remove(key)后,keySet的迭代器同样受到了影响(因为keySet是ArrayMap内部结构的直接引用),所以依然会漏删元素

Iterator<String> it = arrayMap.keySet.iterator();
  while (it.hasNext()) {
    key = it.next();
    if (deleteChatMsg(arrayMap.get(key))) {
       arrayMap.remove(key);
    }
  }

然后去找了下HashMap遍历删除元素的资料,尝试后惊喜地发现ArrayMap同样可以通过iterator.remove()去实现删除集合中的对应元素。

for (Iterator<Map.Entry<String, ChatMsg>> it = arrayMap.entrySet().iterator(); it.hasNext();){
    Map.Entry<String, ChatMsg> item = it.next();
    if (deleteChatMsg(item.getValue())) {
        it.remove();
    }
}

ArrayMap和SimpleArrayMap的差别

因为隐约记得ArrayMap内部好像是数组的实现,特意去翻源码看了下,原来ArrayMap实现了map接口,因此可以当做map来迭代,而SimpleArrayMap是其父类,并没有实现map接口,可以看做是ArrayMap的简单实现,性质上更类似ArrayList, 并没有提供迭代器相关的方法

public class SimpleArrayMap<K, V> 
public class ArrayMap<K, V> extends SimpleArrayMap<K, V> implements Map<K, V> 

参考: Java HashMap 如何正确遍历并删除元素

相关文章

网友评论

      本文标题:ArrayMap如何遍历删除元素

      本文链接:https://www.haomeiwen.com/subject/aslufqtx.html