【HashMap】关于HashMap的一些常见问题探究

本文深入解析了HashMap的起源、工作原理、冲突解决策略、负载因子的概念及其与Hashtable的区别。同时,介绍了HashMap在Java 1.8之后的改进,如数组+链表/红黑树的数据结构优化。

一、HashMap和Hashtable历史叙旧

都知道JAVA中有三大集合List , Set, Map,前两个继承自Collection接口,Map是一个独立的接口,今天主要谈谈Map下的HashMap;Map有三个实现类HashMap、TreeMap和HashTable
Hashtable比HashMap出现的要早,在java一开始发布时就提供的键值映射的数据结构,也就是Key-Value模型;而HashMap产生于JDK1.2,早不代表好,现在主要用的还是HashMap。能被广泛使用还是有它的优势的,比如它查找的时间复杂度是O(1),是不是很牛,下来详细看

二、什么是HashMap

HashMap是一个key-value模型,具有映射关系,内部所用的数据结构是数组+链表/红黑树 ,通过key值可以找到value值,(把皇上当做key,它的那些妃子们就是很多个value,不太恰当,哈哈哈)并允许使用null值和null键,就是key和value的取值都可以为空,但key最多只能允许一个为空,多了的话就会覆盖;Hashtable的key就不允许为空。HashMap不保证映射的顺序,特别是它不保证该顺序恒久不变。

三、HashMa的常用方法

1、put( key,value):就是往里面添加元素,将键映射存放到Map集合中,key不允许重复,要不然会覆盖以前的值
2、get(Object key) :相当于查看,返回指定键所映射的值,没有该key对应的值则返回 null
3、size() :返回Map集合中数据数量,
4、clear() :清空Map集合
5、isEmpty () 判断Map集合中是否有数据,如果没有则返回true,否则返回false
6、remove(Object key) :删除Map集合中键为key的数据并返回其所对应value值。
7、values() :返回Map集合中所有value组成的以Collection数据类型格式数据。
8、containsKey(Object key) 判断集合中是否包含指定键,包含返回 true,否则返回false
9、containsValue(Object value) 判断集合中是否包含指定值,包含返回 true,否则返回false
10、keySet() 返回Map集合中所有key组成的Set集合
11、entrySet() 将Map集合每个key-value转换为一个Entry对象并返回由所有的Entry对象组成的Set集合
部分方法示例

import java.util.HashMap;
public class HashMapDemo {

    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();//定义一个map
        map.put("李白", "1");//存放键值对
        System.out.println(map.containsKey("李白"));//键中是否包含这个数据,打印结果为true
        System.out.println(map.containsKey("王维"));//打印结果为false

        System.out.println(map.get("李白"));//通过键拿值,打印结果是1
        System.out.println(map.get("王维"));//打印结果为null

        System.out.println(map.isEmpty());//判空,打印结果为false
        System.out.println(map.size());//输出map的大小,打印结果为1
        System.out.println(map.remove("李白"));//从键值中删除.打印结果为1
        System.out.println(map.containsKey("李白"));//删除了所以不包含了,输出false
        System.out.println(map.isEmpty());//现在就为空是,输出true

        map.put("杜甫", "2");
        System.out.println(map.get("杜甫"));
        map.put("陶渊明", "3");
        System.out.println(map.get("陶渊明"));

        map.put("杜甫", "4");
        map.put("陶渊明", "6");

        for (String key : map.keySet()) {
            System.out.println(key
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值