HashMap

本篇博文的知识点,在我们的日常生活中,应用十分广阔。比如:每个学生,都有自己的对应的学号、每一个公民,都有自己的身份证号… … 相信看到这里,有的同学基本上已经猜到了这个类的主要用途。那么,话不多说,我们开始主题的讲解吧!

首先,本人要介绍一个概念——“键值对”(即:一个编号对应一个值)。
那么,学习本篇博文的同学,建议先观看本人《JAVA SE》专栏的博文《浅谈 泛型 与 基本类型的封装类》,因为,HashMap类是一个“双泛型类”(因为我们上面提到的 “键值对” 是两个参数)

那么,本人来用一段代码来展示下如何使用这个类:

package com.mec.study;

import java.util.HashMap;

public class AboutHashMap {

	public static void main(String[] args) {
		HashMap<String, String>nameMap = new HashMap<>();
		nameMap.put("1001", "折纸");
		nameMap.put("1002", "二亚");
		nameMap.put("1003", "时崎");
		nameMap.put("2001", "四糸乃");
		nameMap.put("2002", "琴里");
		nameMap.put("3001", "星宫");
		
		String name = nameMap.get("2001");
		System.out.println(name);
	}

}

在这里插入图片描述
可以看出,我们通过 put() 向 nameMap “名单”中录入“键” 和 “值”,之后再用 “键”通过get() 将“值”取出。

那么,现在,本人要提醒几点了:
1.键不能重复,否则将覆盖之前的“值”;
2.值可以重复,甚至可以为 null:
我们来看这样一段代码:

package com.mec.study;

import java.util.HashMap;

public class AboutHashMap {

	public static void main(String[] args) {
		HashMap<String, String>nameMap = new HashMap<>();
		nameMap.put("1001", "折纸");
		nameMap.put("1002", "二亚");
		nameMap.put("1003", "时崎");
		nameMap.put("2001", "四糸乃");
		nameMap.put("2002", "琴里");
		nameMap.put("3001", "星宫");
		nameMap.put("3002", "折纸");
		nameMap.put("3003", null);
		
		String name = nameMap.get("3003");
		System.out.println(name);
	}

}

在这里插入图片描述

3.遍历与无序性:
和本人之前博文《ArrayList 与 LinkedList》所讲到的ArrayList 和 LinkedList 不同,HashMap不会记录你的输入顺序,下面本人来通过代码来验证一下:

package com.mec.study;

import java.util.HashMap;

public class AboutHashMap {

	public static void showNameMap(HashMap<String, String> nameMap) {
		for(String key : nameMap.keySet()) {
			String value = nameMap.get(key);
			System.out.println("键:" + key + "值:" + value);
		}
	}

	public static void main(String[] args) {
		HashMap<String, String> nameMap = new HashMap<>();
		nameMap.put("1001", "折纸");
		nameMap.put("1002", "二亚");
		nameMap.put("1003", "时崎");
		nameMap.put("2001", "四糸乃");
		nameMap.put("2002", "琴里");
		nameMap.put("3001", "星宫");
		
		showNameMap(nameMap);
	}
	
}

下面我们来看一下运行结果:
在这里插入图片描述
4.效率问题:
讲到这里,就牵扯到本人《数据结构与算法》专栏的思想了。
HashMap类,采用了“红黑树”这种高效的数据结构。

红黑树:一种“自平衡二叉查找树”,其插入、删除和查找的 最差情况 的时间复杂度都是O(log N)。

可见,这对于键值对数据量庞大的数据,操作的高效性尤为突出!

那么,有关 HashMap 的基本内容就讲解完成了,当然,HashMap类 还有好多方法本文中未提到,这就需要同学们在需要时自己去查找使用。

那么,周六晚熬到周日凌晨2:12。真的又是苦涩的一周啊!(抱怨勿怪哈!)
若是对上述知识点或代码有任何疑惑、意见或者建议,请在下方评论区提出,本人将尽早予以答复,觉得有所帮助的同学请留下小赞赞,谢谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值