putIfAbsent
和put
都是Java集合框架中Map
接口的方法,它們都用于向Map
中添加元素。但是,這兩個方法之間存在一些關鍵區別:
當鍵不存在時:
putIfAbsent
:如果指定的鍵不存在于Map
中,則將鍵值對添加到Map
中。如果鍵已經存在,則不會執行任何操作,并返回鍵對應的舊值(如果存在)。put
:將鍵值對添加到Map
中,如果鍵已經存在,則會覆蓋舊的值,并返回鍵對應的舊值(如果存在)。返回值:
putIfAbsent
:返回鍵對應的舊值(如果存在),否則返回null
。put
:返回鍵對應的舊值(如果存在),否則返回null
。下面是一個簡單的示例:
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, String> 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
}
}
總結:putIfAbsent
和put
的主要區別在于,當鍵已經存在于Map
中時,putIfAbsent
不會修改鍵對應的值,而put
會覆蓋舊的值。在其他方面,這兩個方法的返回值和行為相似。