1、Map用于保存具有映射关系的数据:Key---Value(双列元素)
2、Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中
Node<K,V> newNode(int hash, K key, V value, Node<K,V> next) {
return new Node<>(hash, key, value, next);
}
3、Map中的key不允许重复,当有重复的key时,value就会发生替换
4、Map中的value可以重复
5、Map的key可以为null,value也可以为null,注意key为null时,只能有一个,value为null时,可以为多个
6、常用的String类作为Map的key
7、key和value之间存在单向一对一关系,即通过指定的key总能找到对应的value
8、Map存放数据的key--value是放在一个Node中的,同时Node实现了Entry接口
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Study {
@SuppressWarnings({"all"})
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("no1","jack");
hashMap.put("no2","smith");
//1.k-v最后是HashMapNode$ node = newNode(hash,key,value,null)
//2.k-v为了方便程序员的遍历,还会创建EntrySet集合,该集合存放的元素类型为Entry
// 而一个Entry对象就有k,v EntrySet<Entry<k,v>>,即:transient Set<Map.Entry<K,V>> entrySet;
//3.在entrySet中,定义的类型是Map.Entry,但实际上存放的还是HashMap$Node
// 因为HashMap$Node implements Map.Entry<K,V>
//4.当把HashMap$Node对象存放到entrySet里面将会方便我们遍历
// 因为Map.Entry提供了getKey()和getValue()方法
Set set = hashMap.entrySet();
System.out.println(set.getClass());//此时的set的getClass为 EntrySet
//public Set<Map.Entry<K,V>> entrySet() {
// Set<Map.Entry<K,V>> es;
// return (es = entrySet) == null ? (entrySet = new EntrySet()) : es;
// }
for (Object obj : set) {
//向下转型
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey()+" "+entry.getValue());
}
Set set1 = hashMap.keySet();
System.out.println(set1.getClass());//KeySet
Collection value = hashMap.values();
System.out.println(value.getClass());//Values
}
}
Map接口的常用方法:
1、put:添加(如果键相同,则value发生替换)
2、remove:根据键删除映射关系
3、get:根据键获取值
4、size:获取元素个数
5、isEmpty:判断个数是否为0
6、clear:清除
7:containsKey:查找键是否存在
import java.util.HashMap;
public class Study {
@SuppressWarnings({"all"})
public static void main(String[] args) {
HashMap hashMap = new HashMap();
//put
hashMap.put("no1","jack");
hashMap.put("no2","a");
hashMap.put("no3","b");
hashMap.put("no1","smith");
System.out.println(hashMap);
//remove
hashMap.remove("no2");
System.out.println(hashMap);
//get
System.out.println(hashMap.get("no1"));
//size
System.out.println(hashMap.size());
//isEmpty
System.out.println(hashMap.isEmpty());
//clear
hashMap.clear();
System.out.println(hashMap);
//containsKey
System.out.println(hashMap.containsKey("no1"));
}
}
Map接口对象遍历方式:
1、keySet:获取所有的键
2、values:获取所有的值
3、entrySet:获取所有关系<k,v>
import java.util.*;
public class Study {
@SuppressWarnings({"all"})
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("no1","a");
hashMap.put("no2","b");
hashMap.put("no3","c");
//先取出所有的Key,通过Key取出对应的Value
Set set = hashMap.keySet();
for (Object key : set) {
System.out.println(hashMap.get(key));
}
//迭代器
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
System.out.println(hashMap.get(key));
}
//取出所有的values
Collection values = hashMap.values();
//for,增强for,迭代器
for (Object value : values) {
System.out.println(value);
}
Iterator iterator1 = values.iterator();
while (iterator1.hasNext()) {
Object value = iterator1.next();
System.out.println(value);
}
//通过EntrySet来获取<k,v>
Set entrySet = hashMap.entrySet();//EntrySet<Map.Entry<K,V>>
//增强for
for (Object kv : entrySet) {
Map.Entry entry = (Map.Entry) kv;
System.out.println(entry.getKey()+"-"+entry.getValue());
}
//迭代器
Iterator iterator2 = entrySet.iterator();
while (iterator2.hasNext()) {
Object kv = iterator2.next();
Map.Entry entry = (Map.Entry) kv;
System.out.println(entry.getKey()+"-"+entry.getValue());
}
}
}