【进口嘉宝溯源码】【怎样收集源码销售】【应用分身源码解析】listmap源码分析

来源:flow 源码

1.HashMap和List遍历方法总结及如何遍历删除

listmap源码分析

HashMap和List遍历方法总结及如何遍历删除

       (一)List的码分遍历方法及如何实现遍历删除

       我们创建一个List并使用不同的方法进行遍历和删除,如下所示:

       1. for循环遍历List:

       ```java

       List list = new ArrayList();

       list.add("zs");

       list.add("ls");

       list.add("ww");

       list.add("dz");

       for(int i=0; i<list.size(); i++){

        if(list.get(i).equals("ls"))

        list.remove(i);

       }

       ```

       这种for循环遍历方式常见,码分但在删除元素时会出现问题。码分因为删除元素后,码分List的码分进口嘉宝溯源码大小会改变,索引也会随之改变,码分怎样收集源码销售导致遍历时可能会漏掉某些元素。码分所以,码分这种方法适用于读取元素,码分但不适合删除元素。码分

       2. 增强for循环:

       ```java

       for(String x : list){

        if(x.equals("ls"))

        list.remove(x);

       }

       ```

       增强for循环也是码分常见的遍历方式,但在删除元素时也会出现问题,码分可能会抛出`ConcurrentModificationException`异常。码分应用分身源码解析原因是码分增强for循环背后实际上是Iterator,在遍历时如果修改了集合的码分结构(如删除元素),则会触发这个异常。

       3. Iterator遍历删除:

       ```java

       Iterator it = list.iterator();

       while(it.hasNext()){

        String x = it.next();

        if(x.equals("del")){

        it.remove();

        }

       }

       ```

       这种方式可以正常遍历和删除元素。ctp看穿式源码与增强for循环不同,这里使用`it.remove()`来直接在Iterator层面删除元素,因此不会出现`ConcurrentModificationException`异常。

       (二)HashMap的负86的源码遍历删除及如何实现遍历删除

       我们先创建一个HashMap:

       ```java

       private static HashMap map = new HashMap();

       public static void main(String[] args) {

        for(int i = 0; i < ; i++){

        map.put(i, "value" + i);

        }

       }

       ```

       1. 第一种遍历删除:

       ```java

       for(Map.Entry entry : map.entrySet()){

        Integer key = entry.getKey();

        if(key % 2 == 0){

        System.out.println("To delete key " + key);

        map.remove(key);

        System.out.println("The key " + key + " was deleted");

        }

       }

       ```

       这种遍历删除同样会抛出`ConcurrentModificationException`异常。

       2. 第二种遍历删除:

       ```java

       Set keySet = map.keySet();

       for(Integer key : keySet){

        if(key % 2 == 0){

        System.out.println("To delete key " + key);

        keySet.remove(key);

        System.out.println("The key " + key + " was deleted");

        }

       }

       ```

       这种方法同样会抛出异常,原因与List的遍历删除类似。

       3. 第三种遍历删除:

       ```java

       Iterator<Map.Entry> it = map.entrySet().iterator();

       while(it.hasNext()){

        Map.Entry entry = it.next();

        Integer key = entry.getKey();

        if(key % 2 == 0){

        System.out.println("To delete key " + key);

        it.remove();

        System.out.println("The key " + key + " was deleted");

        }

       }

       ```

       这种方法是正确的,因为它使用了Iterator的`remove()`方法来删除元素,避免了并发修改的问题。

       综上所述,遍历集合时删除元素应使用Iterator的`remove()`方法,这样可以避免`ConcurrentModificationException`异常。希望大家在遇到类似问题时,能够通过查看源代码找到解决问题的方法。

文章所属分类:热点频道,点击进入>>