java集合(二十二) ---- HashMap 类

目录

二十二、HashMap 类

22.1 位置

22.2 结构

22.3 特点

22.4 构造方法

22.5 常用方法

22.6 小案例:统计输入的各种符号的个数

22.7 分析:多层集合


二十二、HashMap 类

22.1 位置

HashMap 类位于 java.util 包下

22.2 结构

HashMap 类采用哈希表+单链表+红黑树的结构。哈希表用来存储不同位置的元素。单链表和红黑树用来存储哈希表中同一个位置上的多个元素。一开始先用单链表,当单链表的长度大于 8 时转为红黑树结构

java集合(二十二) ---- HashMap 类_第1张图片

22.3 特点

  1. Key 不可以重复,Value 可以重复
  2. 若发生了重复的 Key,则后放入的会覆盖先放入的数据。即同一个键若同时加入集合,则后面键对应的值会覆盖前面键对应的值
  3. 是 Map 接口的实现类
  4. 元素无序。即存入顺序和取出顺序不一样
  5. 注意:存储自定义类的时候,自定义类要重写 equals() 和 hashCode() 方法

22.4 构造方法

public HashMap()

作用

创建一个具有初始容量 16,且加载因子为 0.75 的空的 HashMap 对象

public HashMap(int initialCapacity)

作用

创建一个具有指定初始容量,且加载因子为 0.75 的空的 HashMap 对象

public HashMap(int initialCapacity,float loadFactor)

作用

创建一个具有指定初始容量,且具有指定加载因子的空的 HashMap 对象

public HashMap(Map m)

作用

创建一个包含指定集合 m 的 HashMap 对象

22.5 常用方法

参考 Map 接口

map 接口

22.6 小案例:统计输入的各种符号的个数

java集合(二十二) ---- HashMap 类_第2张图片

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Test{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入你所想的字符:");
        String str = scanner.next();
        //原理:利用了 HashMap 的键是唯一的
        //同一个键若同时加入集合,后面键的值会覆盖前面键的值
        HashMap hashMap = new HashMap();
        for (int i = 0; i < str.length(); i++) {
            //一个一个取出 str 中的字符
            char c = str.charAt(i);
            if (hashMap.containsKey(c)){
                //若包含这个键,则取出这个键的值,然后加一
                Integer value = hashMap.get(c);
                hashMap.put(c,value+1);
            }
            else {
                //若不包含这个键,则初始化
                hashMap.put(c,1);
            }
        }

        for (Map.Entry characterIntegerEntry : hashMap.entrySet()) {
            System.out.println(characterIntegerEntry);
        }
    }
}

22.7 分析:多层集合

java集合(二十二) ---- HashMap 类_第3张图片

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test02 {
    public static void main(String[] args) {
        //分析方法:由外层向内层逐渐拆解要定义的变量。再由内向外进行变量赋值
        //外层第一层:mapParen
        //表示其类型为 Map 类型。而 mapParen 中的每个元素键的类型为 String ,值的类型为 Map
        Map>>> mapParen = new HashMap<>();

        //外层第二层即分析 mapParen 变量中元素值的类型。先定义变量 son2
        //其类型为 Map 类型。其中每个元素键的类型为 String ,值的类型为 List 类型
        Map>> son2 = new HashMap<>();

        //外层第三层即分析 son2 变量中元素值的类型。先定义变量 son3
        //其类型为 List 类型。其中每个元素的类型为 Map 类型
        List> son3 = new ArrayList<>();

        //外层第四层
        Map son4 = new HashMap<>();

        //赋值
        son4.put("小明",25);
        son3.add(son4);
        son2.put("大明",son3);
        mapParen.put("大大明",son2);

        System.out.println(mapParen);
    }
}

你可能感兴趣的:(java,java,开发语言,数据结构,算法)