Java日記 —— 2018年10月24日
阿新 • • 發佈:2019-01-06
一 .HashMap的基本操作
當在hashmap中put的key在之前已經存過,則不會重複儲存,會覆蓋之前key對應的value。
1.containsKey(Object key)方法,返回值為boolean,用於判斷當前hashmap中是否包含key對應的key-value
2.containsValue(Object value)方法,返回值為boolean,用於判斷當前hashmap中是否包含value對應的key-value
3.遍歷hashmap的兩種方式:
(1)利用haspmap.entrySet().iterator():利用迭代器,從Entry中取出鍵、取出值,推薦使用這種方式進行遍歷,效率較高
Iterator<Entry<Integer, Integer>> iterator = hashMap.entrySet().iterator(); while (iterator.hasNext()) { Entry<Integer, Integer> entry = iterator.next(); Integer key = entry.getKey(); Integer value = entry.getValue(); System.out.print(key + "--->" + value); System.out.println(); }
(2)利用hashmap.keySet().iterator():利用鍵的迭代器,每次取出一個鍵,再根據鍵,從hashmap中取出值,這種方式的效率不高,不推薦使用
Iterator<Integer> iterator2 = hashMap.keySet().iterator(); while (iterator2.hasNext()) { Integer key = iterator2.next(); Integer value = hashMap.get(key); System.out.print(key + "---" + value); System.out.println(); }
二、HashSet
HashSet實現了Set介面,它不允許集合中出現重複元素。當我們提到HashSet時,第一件事就是在將物件儲存在
HashSet之前,要確保重寫hashCode()方法和equals()方法,這樣才能比較物件的值是否相等,確保集合中沒有
儲存相同的物件。如果不重寫上述兩個方法,那麼將使用下面方法預設實現:
public boolean add(Object obj)方法用在Set新增元素時,如果元素值重複時返回 "false",如果新增成功則返回"true"
[應用題目] Given a linked list, determine if it has a cycle in it.(這個題目當然還有更高效的方法)
public boolean hasCycle(ListNode head) {
Set<ListNode> nodesSeen = new HashSet<>();
while (head != null) {
if (nodesSeen.contains(head)) {
return true;
} else {
nodesSeen.add(head);
}
head = head.next;
}
return false;
}