一、Null作為map的key
在Java中,map是一種鍵值對的集合,它由一個鍵和一個值組成。鍵是唯一的,而值可以重複。在使用map時,我們可以使用任何對象作為鍵,包括null。
Map<String, String> map = new HashMap<>(); map.put(null, "value");
上面的代碼中就使用了null作為鍵,這是合法的。
但是,如果我們使用null作為鍵,那麼要取出值時就需要使用null作為參數,否則會報錯。
String value = map.get(null);
如果不加判斷直接使用非null的鍵取值,那麼會拋出NullPointerException異常。
String value = map.get("key"); // 拋出NullPointerException異常
二、使用Java8的Optional解決NullPointerException問題
為了解決NullPointerException問題,我們可以使用Java8中的Optional,它是一種容器類,用於包裝可能為null的對象。使用Optional包裝對象可以避免在使用代碼時產生NullPointerException異常。
Map<String, String> map = new HashMap<>(); map.put(null, "value"); Optional<String> optionalValue = Optional.ofNullable(map.get(null)); String value = optionalValue.orElse("default");
這裡使用了Optional.ofNullable方法包裝了map中的value,然後使用orElse方法在value為null時,返回”default”字元串。
三、使用其他對象作為map的key
我們還可以使用其他對象作為map的key,包括自定義對象。但是,如果我們希望使用自定義對象作為鍵,那麼需要重寫hashCode和equals方法,否則就會出現相同的對象卻無法找到對應的值的情況。
public class User { private String name; public User(String name) { this.name = name; } @Override public int hashCode() { return Objects.hash(name); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } User user = (User) obj; return Objects.equals(name, user.name); } } Map<User, String> map = new HashMap<>(); User user = new User("Tom"); map.put(user, "value"); String value = map.get(user);
上面的代碼中,我們使用自定義的User對象作為map的key,並重寫了hashCode和equals方法。這樣,即使使用相同的User對象,也可以正確地找到它所對應的值。
四、總結
在Java中,map中的key可以為null,但是要注意在取值時使用null作為參數。如果我們希望避免NullPointerException異常,可以使用Java8的Optional來處理。除了null,我們還可以使用其他對象作為map的key,但是要注意重寫hashCode和equals方法。
原創文章,作者:RMAT,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/142192.html