精华内容
下载资源
问答
  • Java删除Map元素

    万次阅读 2019-06-04 05:26:38
    前言: 关于JavaMap删除元素的使用,可以使用删除单个元素的事实Map.remove。示例:初始化一个Map对象Map<Integer, String> map = new HashMap<>(); map.put(1, "value 1"); map.put(2, "value 2");...

    前言:

    关于Java从Map中删除元素的使用,可以使用删除单个元素的事实Map.remove

    示例:

    初始化一个Map对象

    Map<Integer, String> map = new HashMap<>();
    map.put(1, "value 1");
    map.put(2, "value 2");
    map.put(3, "value 3");
    map.put(4, "value 4");
    map.put(5, "value 5");复制代码

    有几种方法可以删除元素:

    for(Iterator<Integer> iterator = map.keySet().iterator(); iterator.hasNext(); ) {
      Integer key = iterator.next();
      if(key != 1) {
        iterator.remove();
      }
    }复制代码

    如果不使用Java 8+,就可以使用Iterator以防止 ConcurrentModificationException异常

    如果您使用的

    较新
    版本的Java(8+),那么您可以这样:

    // 通过value移除
    map.values().removeIf(value -> !value.contains("1"));
    // 通过key移除
    map.keySet().removeIf(key -> key != 1);
    // 通过键/值的输入/组合删除
    map.entrySet().removeIf(entry -> entry.getKey() != 1);复制代码

    removeIfCollection s 的方法。一个Map本身不是一个Collection,也无法访问removeIf自己。但是通过使用:valueskeySetentrySet 此实现Collection允许removeIf在其上调用。

    内容返回的valueskeySet而且entrySet是非常重要的。以下是JavaDoc的说明摘要values

    * Returns a {@link Collection} view of the values contained in this map.
    * The collection is backed by the map, so changes to the map are
    * reflected in the collection, and vice-versa.
    *
    * The collection supports element removal, which removes the corresponding
    * mapping from the map, via the {@code Iterator.remove},
    * {@code Collection.remove}, {@code removeAll},
    * {@code retainAll} and {@code clear} operations.复制代码

    这个JavaDoc解释了Collection返回的values是由它支持的。文档指定Iterator.remove可以使用。此外实现removeIfIterator示例如下。

    default boolean removeIf(Predicate<? super E> filter) {
      Objects.requireNonNull(filter);
      boolean removed = false;
      final Iterator<E> each = iterator();
      while (each.hasNext()) {
        if (filter.test(each.next())) {
          each.remove();
          removed = true;
        }
      }
      return removed;
    }复制代码

    总结:

    使用 valueskeySetentrySet接入removeIf 更容易移除Map中的元素。



    转载于:https://juejin.im/post/5cf600ec518825710c63806b

    展开全文
  • Java根据条件删除Map元素

    万次阅读 2014-12-14 16:52:41
    今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下: public Map processMap(Map list) { Map map = list; Iterator ...

    今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下:

    public Map<Double, Double> processMap(Map<Double, Double> list) {

    Map<Double, Double> map = list;

    Iterator<Double> iter = map.keyset().iterator;

    while(iter.hasNext()) {

    double key = iter.next();

    if (key > 5)

    map.remove(key);

    }

    return map;

    }

    但是运行程序的时候却没有正常删除元素,而是提示“java.util.ConcurrentModificationException”错误,很是疑惑,于

    是找了一些关于Map的资料发现:Map的实现不是同步的如果程序中出现多个线程同时访问一个Map,而其中至少一个线程修改Map

    时,它必须保持外部同步。而通过查看Iterator原理发现,Iterator是工作在一个独立的线程中,并且拥有一个 mutex锁,就是说

    Iterator在工作的时候,是不允许被迭代的对象被改变的,所以调用Iterator操作获得的对象在多线程修改Map的时候会自动失效。

    Iterator被创建的时候,建立了一个内存索引表(单链表),这 个索引表指向原来的对象,当原来的对象数量改变的时候,这个索

    引表的内容没有同步改变,所以当索引指针往下移动的时候,便找不到要迭代的对象,于是产生错 误。Map、List、Set等是动态

    的,可变对象数量的数据结构,但是Iterator则是单向不可变,只能顺序读取,不能逆序操作的数据结构,当 Iterator指向的原始

    数据发生变化时,Iterator自己就迷失了方向。

    既然找到了问题的原因,那么如何解决呢?可以通过调用Iterator的remove(Object o)函数来移除元素。

    测试代码如下:

    public Map<Double, Double> processMap(Map<Double, Double> list) {

    Map<Double, Double> map = list;

    Iterator<Double> iter = map.keyset().iterator;

    while(iter.hasNext()) {

    double key = iter.next();

    if (key > 5) {

    //   map.remove(key);  // java.util.ConcurrentModificationException

    iter.remove(key);  // OK

    }

    }

    return map;

    }


    同时,在遍历Map过程中,调用put(key, value)函数来添加元素,也会出现同样的问题,所以同样需要使用迭代器的相应函数来添加。


    展开全文
  • Java 遍历Map删除元素

    万次阅读 2016-08-16 10:58:42
        import java.util.HashMap;  import java.util.Iterator;...import java.util.Map;    public class HashMapTest {   private static Map map=new HashMap();     
    1. package net.nie.test;  
    2.   
    3. import java.util.HashMap;  
    4. import java.util.Iterator;  
    5. import java.util.Map;  
    6.   
    7. public class HashMapTest {  
    8.    private static Map<Integer, String> map=new HashMap<Integer,String>();  
    9.       
    10.    /**  1.HashMap 类映射不保证顺序;某些映射可明确保证其顺序: TreeMap 类 
    11.     *   2.在遍历Map过程中,不能用map.put(key,newVal),map.remove(key)来修改和删除元素, 
    12.     *   会引发 并发修改异常,可以通过迭代器的remove(): 
    13.     *   从迭代器指向的 collection 中移除当前迭代元素 
    14.     *   来达到删除访问中的元素的目的。   
    15.     *   */   
    16.    public static void main(String[] args) {  
    17.         map.put(1,"one");  
    18.         map.put(2,"two");  
    19.         map.put(3,"three");  
    20.         map.put(4,"four");  
    21.         map.put(5,"five");  
    22.         map.put(6,"six");  
    23.         map.put(7,"seven");  
    24.         map.put(8,"eight");  
    25.         map.put(5,"five");  
    26.         map.put(9,"nine");  
    27.         map.put(10,"ten");  
    28.         Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();  
    29.         while(it.hasNext()){  
    30.             Map.Entry<Integer, String> entry=it.next();  
    31.             int key=entry.getKey();  
    32.             if(key%2==1){  
    33.                 System.out.println("delete this: "+key+" = "+key);  
    34.                 //map.put(key, "奇数");   //ConcurrentModificationException  
    35.                 //map.remove(key);      //ConcurrentModificationException  
    36.                 it.remove();        //OK   
    37.             }  
    38.         }  
    39.         //遍历当前的map;这种新的for循环无法修改map内容,因为不通过迭代器。  
    40.         System.out.println("-------\n\t最终的map的元素遍历:");  
    41.         for(Map.Entry<Integer, String> entry:map.entrySet()){  
    42.             int k=entry.getKey();  
    43.             String v=entry.getValue();  
    44.             System.out.println(k+" = "+v);  
    45.         }  
    46.     }  
    47. }  
    展开全文
  • java map删除元素的正确作法

    千次阅读 2020-06-03 10:02:41
    当使用map时有一种情形,想把符合某个条件的元素删除,最直观的想法就是遍历这个map,当符合时就remove,实现起来如下 for(String index:aMap.keySet()) { String s = aMap.get(index); if (s == null) { aMap...

    当使用map时有一种情形,想把符合某个条件的元素删除,最直观的想法就是遍历这个map,当符合时就remove,实现起来如下

            for(String index:aMap.keySet()) {
                String s = aMap.get(index);
                if (s == null) {
                    aMap.remove(index);
                }
            }
    

    但是运行之后就抛了异常ConcurrentModificationException,原因应该就是当remove之后keySet集合已变了,不能再根据它遍历了。

    那么正确的方法是什么呢?就是用迭代器的方式。示例如下:

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

     

    展开全文
  • java 遍历map删除元素

    千次阅读 2015-01-30 10:00:42
    /* * To change this template, choose Tools | Templates * and open the template in the editor. */ import java.util.HashMap; import java.util.Set; import java.util.Iterator;...import java.util.Map; /
  • 相信大家在日常的开发过程中,经常需要对List或Map里面的符合某种业务的数据进行删除,但是如果不了解里面的...下面这篇文章将会给大家详细介绍Java如何在List和Map遍历过程中删除元素,有需要的朋友们可以参考借鉴。
  • Java 8中map删除元素的简单方法.pdf
  • Map<Product, Integer> map = (Map<Product, Integer>) request.getSession().getAttribute("map"); Iterator<Product> iterator = map.keySet().iterator(); while(iterator.hasNext()) { .....
  • java遍历Map时remove删除元素

    万次阅读 2013-10-12 17:49:38
    public class T { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List> list = new ArrayList>();... Map m1 = new HashMap(); m1.put("NAME",
  • Java Map在遍历过程中删除元素

    千次阅读 2017-11-27 15:54:37
    Java中的Map如果在遍历过程中要删除元素,除非通过迭代器自己的remove()方法,否则就会导致抛出ConcurrentModificationException异常。
  • Java在循环中删除Map中的元素

    千次阅读 2018-09-04 09:57:19
    private static void clearYesterdayCachMap(){ ...Map.Entry&lt;String, List&lt;Object&gt;&gt;&gt; it = cachMap.entrySet().iterator();  while(it.hasNext()){  Map.En...
  • 如下内容段是关于 Java 遍历Map的同时时删除指定元素的内容,应该是对码农有些用处。 package net.nie.test; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class ...
  • Java中遍历Map删除元素的方法

    万次阅读 2013-06-29 12:51:26
    用for循环遍历map时,...我想很多朋友在遍历删除Map中的元素时会碰到这个错误异常,这里需要用到Iterator对象,它是一个迭代器。 解决示例: Iterator it = map.keySet().iterator();  while(it.hasNext()) {
  • 一、List遍历过程中删除元素 使用索引下标遍历的方式 public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(2); ...
  • Java 8中map删除元素的简单方法

    万次阅读 2019-04-19 12:48:20
    传统的,在JAVA中得MAP删除元素,可以这样,假设有个MAPMap<Integer, String> map = new HashMap<>(); map.put(1, "value 1"); map.put(2, "value 2"); map.put(3, "value 3"); for...
  • Java Map遍历的同时进行元素删除

    千次阅读 2015-02-06 21:54:17
    import java.util.Map; import java.util.TreeMap; import java.util.Set; import static com.hutao.util.Print.*; import java.util.HashSet; public class Main { public static void main(String[] arg
  • https://blog.csdn.net/cheidou123/article/details/86630168 ... JAVA8-删除元素 传统的,在JAVA中得MAP删除元素,可以这样,假设有个MAPMap<Integer, String> map...
  • 随笔记 删除Map中的某个元素对于一个Map,想要删除其中的某个键值对,该怎么做。当然这很简单,基础的java知识。 List<Map> list = ...for(int i=0;i();i++){ String transDate = list.get(i).get("TransDate")....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 153,263
精华内容 61,305
关键字:

java删除map里的元素

java 订阅