default V putIfAbsent(K key, V value) 如果指定的 key 存在,若 key 的值不為 null,該方法不做任何操作,若 key 的值為 null,將指定的 value 關(guān)聯(lián)給 key 并保存到當前集合;若指定的 key 不存在, 將指定的 value 關(guān)聯(lián)給 key 并保存到當前集合
default V getOrDefault(Object key, V defaultValue) 如果指定的 key 存在(不管值是否為 null),該方法不做任何操作;若 key 不存在,將指定的 value 關(guān)聯(lián)給 key 并保存到當前集合
default V compute(K key, BiFunction<!--? super K-->, ? super V, ? extends V remappingFunction) 將 remappingFunction 的計算結(jié)果的 value 關(guān)聯(lián)到指定的 key;若指定的 key 不存在于當前集合,會在當前集合中創(chuàng)建 key 以及 key 對應的 value
default computeIfAbsent(K key, Function<!--? super K, ? extends V--> mappingFunction) 當 key 為 null 或 key 所對應的 value 為 null 時,執(zhí)行該方法,將 mappingFunction 的計算結(jié)果的 value 關(guān)聯(lián)到指定的 key;若指定的 key不存在于當前集合,會在當前集合中創(chuàng)建 key 以及 key 所對應的 value
default computeIfPersent(K key, BiFunction<!--? super K, ? super V, ? extends V--> remappingFunction) 當 key 不為 null 并且 key 所對應的 value 不為 null 時,執(zhí)行該方法,將 remappingFunction 的計算結(jié)果的 value 關(guān)聯(lián)到指定的 key;若指定的 key 不存在于當前集合,不會創(chuàng)建 key
default V merge(K key, V value, BiFunction<!--? super V, ? super v, ? extends V--> remappingFunction) 如果指定的 key 不存在或 key 的值為 null,將指定的 value 設置為 key 的值;否則根據(jù) key 的舊的值 oldValue,value 計算出新的值 newValue,如果 newValue 為 null,則刪除該 key,否則設置 key 的值為 newValue -default boolean remove(Object key, Object value) 如果 key 的值與指定的值 value 相等(equals),則從當前集合中移除這個 key
default V replace(K key, V value) 若 key 存在,將 key 的舊值替換成指定的 value;若 key 不存在,不會將指定的 key,value 保存到當前集合
default boolean replace(K key, V oldValue, V newValue) 若 key 存在,key 關(guān)聯(lián)的舊值與指定的 oldValue 相等,將 key 關(guān)聯(lián)的舊值替換為指定的 newValue
default void replaceAll(BiFunction<!--? super K, ? super V, ? extends V function) 將 function 的返回值 用來替換當前集合中的所有 key 的值
方法示例
default V putIfAbsent(K key, V value)
public class App
{public static void main( String[] args ){Map<String,Object--> hashMap = new HashMap<>();hashMap.put("name",null);hashMap.put("country","china");// putIfAbsent 方法將值為 null 的鍵 name 賦值為 mike,并返回鍵 name 的舊值 nullSystem.out.println("putIfAbsent('name', 'mike')的返回值:" + hashMap.putIfAbsent("name", "mike")); // putIfAbsent 方法不改變鍵為 country 的值,因為鍵 country 的值為 china(不為 null),并返回舊值 chinaSystem.out.println("putIfAbsent('country', 'japan')的返回值:" + hashMap.putIfAbsent("country", "japan")); hashMap.forEach((k,v) -> System.out.println(k + ":" + v)); }
}
~~out:putIfAbsent('name', 'mike')的返回值:null
~~out:putIfAbsent('country', 'japan')的返回值:china
~~out:country:china
~~out:name:mike
default V getOrDefault(Object key, Object value)
public class App
{public static void main( String[] args ){Map<string,object> hashMap = new HashMap<>();hashMap.put("name",null);// 若鍵 name 不存在, getOrDefault 將指定的值 tom 關(guān)聯(lián)給鍵 name,并保存到 hashMap中;// 若鍵 name 存在(不管值是否為 null);getOrDefault 將不做任何操作hashMap.getOrDefault("name", "tom");hashMap.forEach((k,v) -> System.out.println(k + ":" + v));}
}
~~out:name:null
default V compute(K key, BiFunction<!--? super K-->, ? super V, ? extends V) remappingFunction
public class App
{public static void main( String[] args ){Map<string,object> hashMap = new HashMap<>();hashMap.put("name","tom");// compute 方法將鍵 name 的值賦為 函數(shù)式接口 BiFunction 的實現(xiàn)類方法 apply 的返回結(jié)果;若 apply 的返回結(jié)果為 null ,鍵 name 將會被從 hashMap 中移除;若 hashMap 中沒有鍵 name,compute 會將指定的 key 和它對應計算的 value 存入 hashMap中hashMap.compute("name", new BiFunction<string, object, object>() {@Overridepublic Object apply(String s, Object o) {return o;}});// lambda 寫法hashMap.compute("name",(k,v) -> "tom");hashMap.forEach((k,v) -> System.out.println(k + ":" + v));}
}
~~out:name:tom
default computeIfAbsent(K key, Function<!--? super K, ? extends V--> mappingFunction)
public class App
{public static void main( String[] args ){Map<string,object> hashMap = new HashMap<>();hashMap.put("name",null);// 鍵 name 的值為 null ,符合執(zhí)行 computeIfAbsent 方法的執(zhí)行條件,將 apply 方法返回的值 jerry 關(guān)聯(lián)給指定的鍵 name;// 若鍵 name 的值不為 null;不符合執(zhí)行 computeIfAbsent 方法的執(zhí)行條件,因此 apply 方法的返回值不會影響鍵 name 對應的值 valuehashMap.computeIfAbsent("name", new Function<string, object>() {@Overridepublic Object apply(String s) {return "jerry";}});// lambda 寫法//hashMap.computeIfAbsent("name", k -> "jerry");hashMap.forEach((k,v) -> System.out.println(k + ":" + v));}
}
~~out:name:jerry
default computeIfPersent(K key, BiFunction<!--? super K, ? super V, ? extends V--> remappingFunction)
public class App
{public static void main( String[] args ){Map<string,object> hashMap = new HashMap<>();hashMap.put("name","tom");// 鍵 name 的值為 tom,符合 computeIfPresent 方法的執(zhí)行條件,將 apply 方法的返回值 mike 關(guān)聯(lián)給指定的鍵 name// 若鍵 name 不存在于 hashMap 中,apply 方法不會將 name-mike 存入當前 hashMap// 若鍵 name 對應的值為 null,不會將 apply 的返回值 mike 關(guān)聯(lián)給鍵 namehashMap.computeIfPresent("name", new BiFunction<string, object,object>(){@Overridepublic Object apply(String s, Object o) {return "mike";}});// lambda 寫法// hashMap.computeIfPresent("name", (k,v) -> "mike");hashMap.forEach((k,v) -> System.out.println(k + ":" + v));}
}
~~out:name:mike
default V merge(K key, V value, BiFunction<!--? super V, ? super v, ? extends V--> remappingFunction)
public class App
{public static void main( String[] args ){Map<string,object> hashMap = new HashMap<>();hashMap.put("name","jerry");// 鍵 name 的值不為 null,將 name 的值關(guān)聯(lián)為 apply 方法計算出的新值 jerry->tom;// 若鍵 name 不存在或者鍵 name 的值為 null,merge 方法指定的 value 關(guān)聯(lián)給鍵 name,不執(zhí)行 apply 方法;// 若 name 存在且 name 的值不為 null,而 apply 方法返回的值為 null ,那么 hashMap 中的鍵 name 將被移除hashMap.merge("name", "tom", new BiFunction<object,object, object>() {@Override// o 為舊值 jerry;o2 為給定的值 tompublic Object apply(Object o, Object o2) {return (String)o + "->" + o2;}});// lambda 寫法// hashMap.merge("name", "tom", (oldValue, newValue) -> oldValue + "->" + newValue);hashMap.forEach((k,v) -> System.out.println(k + ":" + v));}
}
~~out:jerry->tom
default boolean remove(Object key, Object value)
public class App
{public static void main( String[] args ){Map<string,object> hashMap = new HashMap<>();hashMap.put("name","jerry");hashMap.put("country", "china");// remove 方法中指定的鍵 name 的值 jerry 與當前 hashMap 中鍵 name 的值一致,因此鍵 name 從 hashMap 中被移除hashMap.remove("name","jerry");hashMap.forEach((k,v) -> System.out.println(k + ":" + v));}
}
~~out:country:china
default V replace(K key, V value)
public class App
{public static void main( String[] args ){Map<string,object> hashMap = new HashMap<>();hashMap.put("name",null);// 若鍵 name 存在(不管值是否為 null),將鍵 name 的值 null 替換為 replace 方法指定的值 tom// 若鍵 name 不存在,不會將 replace 指定的鍵 name 和值 tom 保存到當前 hashMap 中hashMap.replace("name","tom");hashMap.forEach((k,v) -> System.out.println(k + ":" + v));}
}
~~out:name:tom
default boolean replace(K key, V oldValue, V newValue)
public class App
{public static void main( String[] args ){Map<string,object> hashMap = new HashMap<>();hashMap.put("name",null);// 若鍵 name 存在(不管鍵 name 的值是否為 null),若鍵 name 的舊值 null 與 replace 方法中指定的 oldValue 相等,將鍵 name 的舊值 null 替換為 replace 方法中指定的 newValuehashMap.replace("name",null,"jerry");hashMap.forEach((k,v) -> System.out.println(k + ":" + v));}
}
~~out:name:jerry
default void replaceAll(BiFunction<!--? super K, ? super V, ? extends V function)
public class App
{public static void main( String[] args ){Map<String,Object--> hashMap = new HashMap<>();hashMap.put("name",null);hashMap.put("sex","man");hashMap.put("country","china");// 用 apply 方法的返回值將鍵 name 的值替換為 name->null,將鍵 sex 的值替換為 sex->man,將鍵 country 的值替換為 country->chinahashMap.replaceAll(new BiFunction<string, object, object>() {@Override// s:舊的 key;o:舊的 valuepublic Object apply(String s, Object o) {return s + "->" + o;}});// lambda 寫法// hashMap.replaceAll((k,v) -> k + "->" + v);hashMap.forEach((k,v) -> System.out.println(k + ":" + v));}
}
~~out:country:country->china
~~out:sex:sex->man
~~out:name:name->null
```</string,></string,object></string,object></string,object></object,object,></string,object></string,></string,object></string,></string,object></string,></string,object></string,object>