117.info
人生若只如初见

java putifabsent与put区别

putIfAbsentput都是Java集合框架中Map接口的方法,它们都用于向Map中添加元素。但是,这两个方法之间存在一些关键区别:

  1. 当键不存在时:

    • putIfAbsent:如果指定的键不存在于Map中,则将键值对添加到Map中。如果键已经存在,则不会执行任何操作,并返回键对应的旧值(如果存在)。
    • put:将键值对添加到Map中,如果键已经存在,则会覆盖旧的值,并返回键对应的旧值(如果存在)。
  2. 返回值:

    • putIfAbsent:返回键对应的旧值(如果存在),否则返回null
    • put:返回键对应的旧值(如果存在),否则返回null

下面是一个简单的示例:

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map map = new HashMap<>();

        // 使用putIfAbsent
        String oldValue1 = map.putIfAbsent("key1", "value1");
        System.out.println("Old value for key1 (putIfAbsent): " + oldValue1); // 输出:null
        System.out.println("Value for key1 (putIfAbsent): " + map.get("key1")); // 输出:value1

        String oldValue2 = map.putIfAbsent("key1", "value2");
        System.out.println("Old value for key1 (putIfAbsent): " + oldValue2); // 输出:value1
        System.out.println("Value for key1 (putIfAbsent): " + map.get("key1")); // 输出:value1

        // 使用put
        String oldValue3 = map.put("key2", "value3");
        System.out.println("Old value for key2 (put): " + oldValue3); // 输出:null
        System.out.println("Value for key2 (put): " + map.get("key2")); // 输出:value3

        String oldValue4 = map.put("key1", "value4");
        System.out.println("Old value for key1 (put): " + oldValue4); // 输出:value1
        System.out.println("Value for key1 (put): " + map.get("key1")); // 输出:value4
    }
}

总结:putIfAbsentput的主要区别在于,当键已经存在于Map中时,putIfAbsent不会修改键对应的值,而put会覆盖旧的值。在其他方面,这两个方法的返回值和行为相似。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe08aAzsIAQJfBQ.html

推荐文章

  • java local变量能被优化吗

    Java编译器和JIT(Just-In-Time)编译器会对代码进行一定程度的优化。对于局部变量,编译器可能会进行以下优化: 寄存器分配:编译器会根据变量的使用频率和生命...

  • java local变量能被存储吗

    Java中的局部变量是方法内部的变量,它们的作用域仅限于定义它们的方法。当方法执行完毕后,局部变量会从栈中弹出并销毁。因此,局部变量不能被存储在方法外部或...

  • java local变量能被线程吗

    Java中的局部变量是线程安全的,因为它们是在方法内部声明的,并且只能在声明它们的方法内部访问。当一个线程调用一个方法时,它会创建一个新的栈帧来存储该方法...

  • java local变量能被作用域吗

    是的,Java中的局部变量具有作用域。局部变量的作用域限定在定义它的代码块内,例如在方法、构造函数或者初始化块中。当代码块执行完毕后,局部变量就会被销毁,...

  • java putifabsent能处理并发吗

    是的,putIfAbsent方法在Java的ConcurrentHashMap类中可以处理并发。ConcurrentHashMap是一个线程安全的哈希表实现,它使用了分段锁技术来减小锁的粒度,从而提高...

  • java putifabsent有何作用

    putIfAbsent是Java中的一个方法,它属于java.util.concurrent.ConcurrentHashMap类。这个方法的主要作用是在指定的键(key)不存在的情况下,将键值对(key-valu...

  • java putifabsent怎样实现

    putIfAbsent是Java中的一个方法,用于在映射(Map)中插入一个键值对。如果映射中不存在该键,则插入该键值对;否则,不执行任何操作。这个方法属于java.util.Ma...

  • python命令行参数更新频率

    Python 命令行参数的更新频率取决于你的程序如何解析和处理这些参数 如果你使用 argparse 模块来处理命令行参数,那么每次你在命令行中输入参数时,argparse 都会...