Map的相关用法
map中的值成对存在 Key-value
Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
get(Object key):返回指定键所映射的值,若不包含该键的映射关系,则返回null
put(K key,V value):将指定的值与此映射中指定键关联
remove(Object key):如果存在一个键的映射关系,则移除
//遍历
keySet():返回此映射中包含的键的set视图
Set<>keyset = map.keyset();
Iterator<> it = keyset.iterator();//Iterator迭代器
while(it.hasNext()){
}
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
}
例题:剑指offer 35. 复制链表的复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof
class Solution {
public Node copyRandomList(Node head) {
if(head == null) return null;
Node cur = head;
Map<Node, Node> map = new HashMap<>();
// 复制各节点,并建立 “原节点 -> 新节点” 的 Map 映射
while(cur != null) {
map.put(cur, new Node(cur.val));
cur = cur.next;
}
cur = head;
// 构建新链表的 next 和 random 指向
while(cur != null) {
map.get(cur).next = map.get(cur.next);
// map.get(cur)获取了Key(cur)对应的Value(new Node(cur.val))
//map.get(cur).next--->所复制的new Node(cur.val).nest
map.get(cur).random = map.get(cur.random);
cur = cur.next;
}
// 5. 返回新链表的头节点
return map.get(head);
}
}