1、Map

    • Map集合概述和使用
      • Map集合概述
        • Interface Map K:键的类型; V:值的类型
        • 将键映射到值得对象;不能包含重复的键;每个键可以映射到最多一个值
        • 例如:学生的学号和姓名
          • 键 值
          • 001 王小恒
          • 002 王中恒
          • 003 王大恒
    • 创建Map集合的对象
      • 多态的方式
      • 具体的实现类HashMap
    • Map集合的基本功能 | 方法名 | 说明 | | —- | —- | | V put(K key, V value) | 添加元素(键值对) | | V remove(Object key) | 根据键删除键值对元素 | | void clear() | 移除所有的键值对元素 | | boolean containsKey(Object key) | 判断集合是否包含指定的键 | | boolean containsValue(Object value) | 判断集合是否包含指定的值 | | boolean isEmpty() | 判断集合是否为空 | | int size() | 集合的长度,也就是集合中键值对的个数 |

    • Map集合的获取功能 | 方法名 | 说明 | | —- | —- | | V get(Object key) | 根据键获取值 | | Set keySet() | 获取所有键的集合 | | Collection values() | 获取所有值的集合 | | Set> entrySet() | 获取所有键值对对象的集合 |

    • Map集合的遍历

      1. public class MapDemo {
      2. public static void main(String[] args) {
      3. Map<String, String> map = new HashMap<>();
      4. map.put("001", "王小恒");
      5. map.put("002", "王中恒");
      6. map.put("003", "王大恒");
      7. //先获取键的集合
      8. Set<String> keys = map.keySet();
      9. //通过增强for遍历键的同时通过键 get()方法获取值
      10. for(String s : keys) {
      11. System.out.println(s + ", " + map.get(s));
      12. }
      13. }
      14. }
      1. public class MapDemo {
      2. public static void main(String[] args) {
      3. Map<String, String> map = new HashMap<>();
      4. map.put("001", "王小恒");
      5. map.put("002", "王中恒");
      6. map.put("003", "王大恒");
      7. //通过entrySet方法先获得键值对对象
      8. Set<Map.Entry<String, String>> entrySet = map.entrySet();
      9. //通过键值对对象的getKey和getValue方法获得键和值
      10. for(Map.Entry<String, String> me : entrySet) {
      11. String key = me.getKey();
      12. String value = me.getValue();
      13. System.out.println(key + ", " + value);
      14. }
      15. }
      16. }
      1. /*
      2. HashMap集合存储学生对象并遍历
      3. 键是学号(String),值是学生对象(Student)
      4. */
      5. public class MapDemo {
      6. public static void main(String[] args) {
      7. //创建Map对象
      8. Map<String,Student> map = new HashMap<>();
      9. //创建学生对象
      10. Student s1 = new Student("王小恒",18);
      11. Student s2 = new Student("王中恒",19);
      12. Student s3 = new Student("王大恒",20);
      13. map.put("001",s1);
      14. map.put("002",s2);
      15. map.put("003",s3);
      16. //遍历方式1
      17. Set<String> keySet = map.keySet();
      18. for(String key : keySet) {
      19. Student sValue = map.get(key);
      20. System.out.println(key + ", " + sValue.getName() + ", " + sValue.getAge());
      21. }
      22. System.out.println("----------");
      23. //遍历方式2
      24. Set<Map.Entry<String, Student>> entrySet = map.entrySet();
      25. for(Map.Entry<String, Student> me : entrySet) {
      26. String key = me.getKey();
      27. Student s = me.getValue();
      28. System.out.println(key + ", " + s.getName() + ", " + s.getAge());
      29. }
      30. }
      31. }
      1. /*
      2. HashMap集合存储学生对象并遍历
      3. 键是学生(Student),值是学生家庭住址(String)
      4. */
      5. public class MapDemo {
      6. public static void main(String[] args) {
      7. //创建Map对象
      8. Map<Student,String> map = new HashMap<>();
      9. //创建学生对象
      10. Student s1 = new Student("王小恒",18);
      11. Student s2 = new Student("王中恒",19);
      12. Student s3 = new Student("王大恒",20);
      13. map.put(s1,"山东聊城");
      14. map.put(s2,"贵州贵阳");
      15. map.put(s3,"北京海淀");
      16. //遍历方式1
      17. Set<Student> keySet = map.keySet();
      18. for(Student key : keySet) {
      19. String value = map.get(key);
      20. System.out.println(key.getName() + ", " + key.getAge() + value);
      21. }
      22. System.out.println("----------");
      23. //遍历方式2
      24. Set<Map.Entry<Student, String>> entrySet = map.entrySet();
      25. for(Map.Entry<Student, String> me : entrySet) {
      26. Student key = me.getKey();
      27. String addValue = me.getValue();
      28. System.out.println(key.getName() + ", " + key.getAge() + ", " + addValue);
      29. }
      30. }
      31. }

      ```java / 创建一个ArrayList集合,存储三个元素,每一个元素都是HashMap,每一个HashMap的键和值都是String,并遍历 / public class HashMapList { public static void main(String[] args) {

      1. ArrayList<HashMap<String, String>> arr = new ArrayList<>();
      2. HashMap<String, String> hm1 = new HashMap<>();
      3. hm1.put("001", "王小恒");
      4. hm1.put("002", "王中恒");
      5. hm1.put("003", "王大恒");
      6. HashMap<String, String> hm2 = new HashMap<>();
      7. hm2.put("004", "王小恒");
      8. hm2.put("005", "王中恒");
      9. hm2.put("006", "王大恒");
      10. HashMap<String, String> hm3 = new HashMap<>();
      11. hm3.put("007", "王小恒");
      12. hm3.put("008", "王中恒");
      13. hm3.put("009", "王大恒");
      14. arr.add(hm1);
      15. arr.add(hm2);
      16. arr.add(hm3);
      17. Iterator<HashMap<String, String>> it = arr.iterator();
      18. while (it.hasNext()) {
      19. HashMap<String, String> hm = it.next();
      20. Set<String> keySet = hm.keySet();
      21. for(String key : keySet) {
      22. String value = hm.get(key);
      23. System.out.println(key + ", " + value);
      24. }
      25. }

      } }

    1. ```java
    2. /*
    3. 创建一个HashMap集合,存储三个键值对元素,每一个键值对元素的键是String,值是ArrayList,每一个ArrayList的元素是String,并遍历
    4. */
    5. public class ArrayListMap {
    6. public static void main(String[] args) {
    7. HashMap<String, ArrayList<String>> hm = new HashMap<>();
    8. ArrayList<String> arrayList1 = new ArrayList<>();
    9. arrayList1.add("王小恒");
    10. arrayList1.add("王中恒");
    11. arrayList1.add("王大恒");
    12. ArrayList<String> arrayList2 = new ArrayList<>();
    13. arrayList2.add("王小恒");
    14. arrayList2.add("王中恒");
    15. arrayList2.add("王大恒");
    16. ArrayList<String> arrayList3 = new ArrayList<>();
    17. arrayList3.add("王小恒");
    18. arrayList3.add("王中恒");
    19. arrayList3.add("王大恒");
    20. hm.put("001", arrayList1);
    21. hm.put("002", arrayList2);
    22. hm.put("003", arrayList3);
    23. Set<String> keySet = hm.keySet();
    24. for(String key : keySet) {
    25. ArrayList<String> arr = hm.get(key);
    26. for(String s : arr) {
    27. System.out.println(key + ", " + s);
    28. }
    29. }
    30. }
    31. }
    • 统计字符串中每个字符出现的次数

      • image.png
      • image.png

        1. /*
        2. 统计字符串中每个字符出现的次数
        3. 键盘录入一个字符串,要求统计字符串中每个字符串出现的次数
        4. */
        5. public class CountChar {
        6. public static void main(String[] args) {
        7. Scanner sc = new Scanner(System.in);
        8. System.out.println("请输入一个字符串:");
        9. String input = sc.nextLine();
        10. HashMap<Character, Integer> hm = new HashMap<>();
        11. for(int i=0; i<input.length(); i++) {
        12. char c = input.charAt(i);
        13. if(hm.get(c) == null) {
        14. hm.put(c, 1);
        15. } else {
        16. int value = hm.get(c);
        17. hm.put(c, value+1);
        18. }
        19. }
        20. //遍历并输出指定格式
        21. Set<Character> keySet = hm.keySet();
        22. for(Character c : keySet) {
        23. int count = hm.get(c);
        24. System.out.print(c + "(" + count + ")");
        25. }
        26. }
        27. }