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 时转为红黑树结构

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<? extends K,? extends V> m)

作用

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

22.5 常用方法

参考 Map 接口

map 接口

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

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<Character,Integer> hashMap = new HashMap<Character,Integer>();
        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<Character, Integer> characterIntegerEntry : hashMap.entrySet()) {
            System.out.println(characterIntegerEntry);
        }
    }
}

22.7 分析:多层集合

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<String,Map<String, List<Map<String,Integer>>>> mapParen = new HashMap<>();

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

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

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

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

        System.out.println(mapParen);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值