一、containsKey方法簡介
containsKey方法是Java Map接口中的方法之一,用於判斷Map集合中是否包含某個指定的key,方法返回一個boolean類型值。如果Map中包含指定的key則返回true,否則返回false。
public boolean containsKey(Object key)
二、containsKey方法的使用方式
在Java Map中,containsKey方法有多種使用方式。下面這個例子展示了如何使用containsKey方法來判斷Map中是否包含指定key值:
Map<String,Integer> map = new HashMap<>(); map.put("apple",1); map.put("banana",2); map.put("orange",3); if(map.containsKey("apple")){ System.out.println("map contains key apple"); }
在這個例子中,我們首先創建了一個HashMap對象,並向該Map中添加了三個以String為key,以Integer為value的元素。接下來利用containsKey方法判斷Map集合中是否包含指定key值”apple”,如果包含則輸出語句”map contains key apple”。
三、containsKey方法與equals方法的關係
在判斷Map中是否包含某個指定的key時,一般將該key對象與Map中的key對象進行equals方法比較,因為containsKey方法使用了該key對象的equals方法來判斷是否相等。
下面這個例子展示了在Map中使用自定義對象作為key時,需要重寫equals方法和hashCode方法:
public class Person { private String name; private int age; //...getter and setter methods @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Person)) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name); } @Override public int hashCode() { return Objects.hash(name, age); } } Map<Person,Integer> map = new HashMap<>(); map.put(new Person("Tom",18), 1); map.put(new Person("Jerry",17), 2); if(map.containsKey(new Person("Tom",18))){ System.out.println("map contains key Tom"); }
在這個例子中,我們使用一個Person對象作為Map中的key,並向該Map中添加了兩個Person對象。接下來利用containsKey方法判斷Map集合中是否包含某個指定Person對象時,由於需要對Person對象進行equals方法比較,所以需要重寫Person類的equals方法和hashCode方法。
四、containsKey方法與ConcurrentModificationException
由於Map集合在遍歷時可能被其他線程修改,如果在遍歷過程中調用containsKey方法時Map已經被修改,則有可能會拋出ConcurrentModificationException異常。
下面這個例子展示了在遍歷Map時,對Map中的元素進行添加操作並調用containsKey方法時拋出ConcurrentModificationException異常:
Map<String,Integer> map = new HashMap<>(); map.put("apple",1); map.put("banana",2); map.put("orange",3); for(Map.Entry<String,Integer> entry : map.entrySet()){ if(!map.containsKey("pear")){ map.put("pear",4); } }
在這個例子中,我們首先創建了一個HashMap對象,並向該Map中添加了三個元素。接下來在遍歷Map時,對Map中的元素進行添加操作並調用containsKey方法,由於Map在遍歷時被修改,因此拋出ConcurrentModificationException異常。
五、containsKey方法的性能分析
containsKey方法的底層實現依賴於HashMap類的Entry數組,具體實現方式為遍歷Entry數組,將目標key與數組中的key對象進行比較,直到找到匹配的元素或者遍歷完數組。
因此,containsKey方法的時間複雜度為O(n),隨着元素數量的增加,containsKey方法的性能將逐漸降低。在使用Map集合時應該盡量避免使用containsKey方法進行大量的元素查找,如果需要進行查找操作,可以考慮將Map中的元素轉為List或者Set集合進行查找,這些集合類提供了更快的查找速度。
原創文章,作者:IAMEE,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/372478.html