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
- }
- }
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"));
- }
- }
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());
- }
- }
- }