• java(Map接口)


    1、Map用于保存具有映射关系的数据:Key---Value(双列元素)

    2、Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中

    1. Node<K,V> newNode(int hash, K key, V value, Node<K,V> next) {
    2. return new Node<>(hash, key, value, next);
    3. }

    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接口

    1. import java.util.Collection;
    2. import java.util.HashMap;
    3. import java.util.Map;
    4. import java.util.Set;
    5. public class Study {
    6. @SuppressWarnings({"all"})
    7. public static void main(String[] args) {
    8. HashMap hashMap = new HashMap();
    9. hashMap.put("no1","jack");
    10. hashMap.put("no2","smith");
    11. //1.k-v最后是HashMapNode$ node = newNode(hash,key,value,null)
    12. //2.k-v为了方便程序员的遍历,还会创建EntrySet集合,该集合存放的元素类型为Entry
    13. // 而一个Entry对象就有k,v EntrySet<Entry<k,v>>,即:transient Set<Map.Entry<K,V>> entrySet;
    14. //3.在entrySet中,定义的类型是Map.Entry,但实际上存放的还是HashMap$Node
    15. // 因为HashMap$Node implements Map.Entry<K,V>
    16. //4.当把HashMap$Node对象存放到entrySet里面将会方便我们遍历
    17. // 因为Map.Entry提供了getKey()和getValue()方法
    18. Set set = hashMap.entrySet();
    19. System.out.println(set.getClass());//此时的set的getClass为 EntrySet
    20. //public Set<Map.Entry<K,V>> entrySet() {
    21. // Set<Map.Entry<K,V>> es;
    22. // return (es = entrySet) == null ? (entrySet = new EntrySet()) : es;
    23. // }
    24. for (Object obj : set) {
    25. //向下转型
    26. Map.Entry entry = (Map.Entry) obj;
    27. System.out.println(entry.getKey()+" "+entry.getValue());
    28. }
    29. Set set1 = hashMap.keySet();
    30. System.out.println(set1.getClass());//KeySet
    31. Collection value = hashMap.values();
    32. System.out.println(value.getClass());//Values
    33. }
    34. }

    Map接口的常用方法:

    1、put:添加(如果键相同,则value发生替换)

    2、remove:根据键删除映射关系

    3、get:根据键获取值

    4、size:获取元素个数

    5、isEmpty:判断个数是否为0

    6、clear:清除

    7:containsKey:查找键是否存在

    1. import java.util.HashMap;
    2. public class Study {
    3. @SuppressWarnings({"all"})
    4. public static void main(String[] args) {
    5. HashMap hashMap = new HashMap();
    6. //put
    7. hashMap.put("no1","jack");
    8. hashMap.put("no2","a");
    9. hashMap.put("no3","b");
    10. hashMap.put("no1","smith");
    11. System.out.println(hashMap);
    12. //remove
    13. hashMap.remove("no2");
    14. System.out.println(hashMap);
    15. //get
    16. System.out.println(hashMap.get("no1"));
    17. //size
    18. System.out.println(hashMap.size());
    19. //isEmpty
    20. System.out.println(hashMap.isEmpty());
    21. //clear
    22. hashMap.clear();
    23. System.out.println(hashMap);
    24. //containsKey
    25. System.out.println(hashMap.containsKey("no1"));
    26. }
    27. }

    Map接口对象遍历方式:

    1、keySet:获取所有的键

    2、values:获取所有的值

    3、entrySet:获取所有关系<k,v>

    1. import java.util.*;
    2. public class Study {
    3. @SuppressWarnings({"all"})
    4. public static void main(String[] args) {
    5. HashMap hashMap = new HashMap();
    6. hashMap.put("no1","a");
    7. hashMap.put("no2","b");
    8. hashMap.put("no3","c");
    9. //先取出所有的Key,通过Key取出对应的Value
    10. Set set = hashMap.keySet();
    11. for (Object key : set) {
    12. System.out.println(hashMap.get(key));
    13. }
    14. //迭代器
    15. Iterator iterator = set.iterator();
    16. while (iterator.hasNext()) {
    17. Object key = iterator.next();
    18. System.out.println(hashMap.get(key));
    19. }
    20. //取出所有的values
    21. Collection values = hashMap.values();
    22. //for,增强for,迭代器
    23. for (Object value : values) {
    24. System.out.println(value);
    25. }
    26. Iterator iterator1 = values.iterator();
    27. while (iterator1.hasNext()) {
    28. Object value = iterator1.next();
    29. System.out.println(value);
    30. }
    31. //通过EntrySet来获取<k,v>
    32. Set entrySet = hashMap.entrySet();//EntrySet<Map.Entry<K,V>>
    33. //增强for
    34. for (Object kv : entrySet) {
    35. Map.Entry entry = (Map.Entry) kv;
    36. System.out.println(entry.getKey()+"-"+entry.getValue());
    37. }
    38. //迭代器
    39. Iterator iterator2 = entrySet.iterator();
    40. while (iterator2.hasNext()) {
    41. Object kv = iterator2.next();
    42. Map.Entry entry = (Map.Entry) kv;
    43. System.out.println(entry.getKey()+"-"+entry.getValue());
    44. }
    45. }
    46. }

  • 相关阅读:
    [每日算法 - 阿里机试] leetcode19. 删除链表的倒数第 N 个结点
    力扣刷题记录22.1-----541. 反转字符串 II
    http中get和post怎么选
    前端开发面试题之http和https详解
    Markdown数学公式大全
    μC/OS-II---计时器管理2(os_tmr.c)
    Cordova系列之化繁为简:打造全场景适用的Cordova组件
    思考-生涯思考-GPT-5对人们的影响
    《FAQ专场 | smardaten及应用软件的运维管理(上)》
    面试题速记:JavaScript有哪些数据类型,它们的区别是?
  • 原文地址:https://blog.csdn.net/weixin_63954483/article/details/125461132