1. 程式人生 > >Java日記 —— 2018年10月24日

Java日記 —— 2018年10月24日

一 .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;
}