• Map集合的概述和接口的使用


    目录

    一、Map集合概述

     1.Map接口的特点

    2.方法

    二、Map接口的使用

    三、Map集合的实现类

    1.HashMap

    2.Hashtable

    3.Properties

    4.TreeMap


    一、Map集合概述

     1.Map接口的特点

    (1)用于存储任意键值对

    (2)键:无序、无下标、不允许重复(唯一)

    (3)值:无序、无下标、允许重复

    2.方法

    V put(K key,V value);  //将对象存入到集合中,关联键值。key重复则覆盖原值

    Object get(Object key)//根据键值获取对应的值。

    Set    //返回所有的key。

    Collection values()    //返回包含所有值的Collection集合。

    二、Map接口的使用

    1. import java.util.HashMap;
    2. import java.util.Map;
    3. /**
    4. * Map接口的使用
    5. * 特点:1.存储键值对 2.键不能重复,值可以重复 3.无序
    6. */
    7. public class Demo01 {
    8. public static void main(String[] args) {
    9. //创建Map集合
    10. Map map = new HashMap<>();
    11. //1.添加元素
    12. map.put("china","中国");
    13. map.put("uk","英国");
    14. map.put("usa","美国");
    15. System.out.println("元素个数:" + map.size());
    16. System.out.println(map.toString());
    17. System.out.println("----------------");
    18. //2.删除
    19. map.remove("usa");
    20. System.out.println("删除后的元素个数:"+map.size());
    21. System.out.println("----------------");
    22. //3.遍历
    23. //(1)使用keySet();
    24. for (String key : map.keySet()){
    25. System.out.println(key+"---"+map.get(key));
    26. }
    27. System.out.println("----------------");
    28. //(2)使用entrySet()方法
    29. for (Map.Entry entry : map.entrySet()){
    30. System.out.println(entry.getKey()+"-------"+entry.getValue());
    31. }
    32. System.out.println("----------------");
    33. //4.判断
    34. System.out.println(map.containsKey("cn"));
    35. System.out.println(map.containsValue("中国"));
    36. }
    37. }

    三、Map集合的实现类

    1.HashMap

    线程不安全,运行效率快,允许用null作为key或是value。

    测试类:

    1. import java.util.HashMap;
    2. import java.util.Map;
    3. /**
    4. * HashMap集合的使用
    5. * 存储结构:哈希表(数组+链表+红黑树)
    6. * 使用key可hashcode和equals作为重复
    7. *
    8. */
    9. public class Demo2 {
    10. public static void main(String[] args) {
    11. //创建集合
    12. HashMap students = new HashMap();
    13. //1.添加元素
    14. Student s1 = new Student("孙悟空",143546);
    15. Student s2 = new Student("猪八戒",5633421);
    16. Student s3 = new Student("哮天犬",23435);
    17. students.put(s1,"北京");
    18. students.put(s2,"上海");
    19. students.put(s3,"深圳");
    20. students.put(new Student("哮天犬",23435),"南京");
    21. System.out.println("元素个数:"+students.size()); //元素个数:3
    22. System.out.println(students.toString());
    23. System.out.println("--------------------");
    24. //2.删除元素
    25. students.remove(s1);
    26. System.out.println("删除之后的元素个数:"+students.size());
    27. System.out.println("--------------------");
    28. //3.遍历
    29. //(1)使用keySet();
    30. for (Student key : students.keySet()){
    31. System.out.println(key.toString()+"---"+students.get(key));
    32. }
    33. System.out.println("--------------------");
    34. //(2)使用entrySet()方法
    35. for (Map.Entry entry : students.entrySet()){
    36. System.out.println(entry.getKey()+"---"+students.entrySet());
    37. }
    38. System.out.println("--------------------");
    39. //4.判断
    40. System.out.println(students.containsKey(s1));
    41. System.out.println(students.containsValue("北京"));
    42. }
    43. }

    学生类:

    1. import java.util.Objects;
    2. public class Student {
    3. private String name;
    4. private int stuNo;
    5. public Student(String name, int stuNo) {
    6. this.name = name;
    7. this.stuNo = stuNo;
    8. }
    9. public Student() {
    10. }
    11. public String getName() {
    12. return name;
    13. }
    14. public void setName(String name) {
    15. this.name = name;
    16. }
    17. public int getStuNo() {
    18. return stuNo;
    19. }
    20. public void setStuNo(int stuNo) {
    21. this.stuNo = stuNo;
    22. }
    23. @Override
    24. public boolean equals(Object o) {
    25. if (this == o) return true;
    26. if (!(o instanceof Student)) return false;
    27. Student student = (Student) o;
    28. return stuNo == student.stuNo && Objects.equals(name, student.name);
    29. }
    30. @Override
    31. public int hashCode() {
    32. return Objects.hash(name, stuNo);
    33. }
    34. @Override
    35. public String toString() {
    36. return "Student{" +
    37. "name='" + name + '\'' +
    38. ", stuNo=" + stuNo +
    39. '}';
    40. }
    41. }

    2.Hashtable

    线程安全,运行效率慢,不允许null作为key或是value。

    3.Properties

    Hashtable的子类,要求key和value都是String,通常用于配置文件的读取。

    4.TreeMap

    实现了SortedNap接口(是Map的子接口),可以对key自动排序。

    使用:

    1. import java.util.Map;
    2. import java.util.TreeMap;
    3. /**
    4. * TreeMap的使用
    5. * 存储结构:红黑树
    6. */
    7. public class Demo3 {
    8. public static void main(String[] args) {
    9. //新建集合
    10. TreeMap treeMap = new TreeMap();
    11. //1.添加元素
    12. Student s1 = new Student("孙悟空",143546);
    13. Student s2 = new Student("猪八戒",5633421);
    14. Student s3 = new Student("哮天犬",23435);
    15. treeMap.put(s1,"北京");
    16. treeMap.put(s2,"上海");
    17. treeMap.put(s3,"广东");
    18. System.out.println("元素个数:"+treeMap.size());
    19. System.out.println(treeMap.toString());
    20. System.out.println("-----------------");
    21. //2.删除
    22. treeMap.remove(s1);
    23. System.out.println(treeMap.size());
    24. System.out.println("-----------------");
    25. //3.遍历
    26. //(1)使用keySet
    27. for (Student key : treeMap.keySet()){
    28. System.out.println(key+"--"+treeMap.get(key));
    29. }
    30. System.out.println("-----------------");
    31. for (Map.Entry entry : treeMap.entrySet()){
    32. System.out.println(entry.getKey()+"----"+entry.getValue());
    33. }
    34. System.out.println("-----------------");
    35. //4.判断
    36. System.out.println(treeMap.containsKey(new Student("孙悟空",143546)));
    37. }
    38. }

    学生类:

    1. import java.util.Objects;
    2. public class Student implements Comparable{
    3. private String name;
    4. private int stuNo;
    5. public Student(String name, int stuNo) {
    6. this.name = name;
    7. this.stuNo = stuNo;
    8. }
    9. public Student() {
    10. }
    11. public String getName() {
    12. return name;
    13. }
    14. public void setName(String name) {
    15. this.name = name;
    16. }
    17. public int getStuNo() {
    18. return stuNo;
    19. }
    20. public void setStuNo(int stuNo) {
    21. this.stuNo = stuNo;
    22. }
    23. @Override
    24. public boolean equals(Object o) {
    25. if (this == o) return true;
    26. if (!(o instanceof Student)) return false;
    27. Student student = (Student) o;
    28. return stuNo == student.stuNo && Objects.equals(name, student.name);
    29. }
    30. @Override
    31. public int hashCode() {
    32. return Objects.hash(name, stuNo);
    33. }
    34. @Override
    35. public String toString() {
    36. return "Student{" +
    37. "name='" + name + '\'' +
    38. ", stuNo=" + stuNo +
    39. '}';
    40. }
    41. @Override
    42. public int compareTo(Student o) {
    43. int n2 = this.stuNo-o.getStuNo(); //只比较学号
    44. return n2;
    45. }
    46. }


    定制规则:

    重在理解!

    感谢ლ(°◕‵ƹ′◕ლ)!!!

  • 相关阅读:
    集合框架(二)前置知识
    springboot实现在线人数统计
    rnacos——用rust重新实现的nacos开源配置、注册中心服务
    QT打造高效线程池异步QWebSocket 客户端
    Mysql索引学习笔记
    深度学习复盘与论文复现B
    抖音微短剧小程序平台:源码搭建与广告回传技术详解
    (算法设计与分析)第三章动态规划-第一节2:动态规划之使用“斐波那契数列”问题说明重叠子问题如何解决
    【无标题】
    vue使用腾讯地图获取经纬度和逆解析获取详细地址
  • 原文地址:https://blog.csdn.net/yao_yaoya/article/details/128080458