Java基础之 Map接口

一、Map接口

Map就是用来存储“键(key-值(value)对)”的。Map类中存储的“键值对”通过键来识别,所以“键对象”不能重复。
Map接口的实现类有HashMap、TreeMap、HashTable、Properties等。
HashMap有以下一些常用的方法:
在这里插入图片描述

二、哈希表

为了下面更好的理解HashMap,我们先来简单的了解一下哈希表

我们知道数据结构中是由数组和链表来实现对数据的存储,但是数组和链表都有各自的优劣势:
数组:占用空间连续,寻址容易,查询速度快,但是,增加和删除的效率非常低。
链表:占用空间不连续,寻址困难,查询速度慢,但是,增加和删除效率非常高。
那我们把数组和链表的优点结合起来,不就能解决问题了吗,于是就有了哈希表,HashMap的底层实现原理就是哈希表。

我们在List接口的LinkedList实现类中介绍了链表Java基础之List接口,哈希表就是利用多个链表和数组结合的具有查询快,增删效率的表。

哈希表(Hash table),也叫离散表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

举个例子来说,哈希表就像我们的字典,当我们要在字典中找一个字的时候,我们只需要根据这个字的拼音(我们这里就以拼音查字发来比喻)知道这个字所在的页数,然后再到这一页一个字一个字的去找,就能找到这个字。这样比喻过来,我们就需要了解哈希表中的key、哈希值、value这三个值,key就是这个字的拼音,哈希值就是这个字的页数,value就是这个字。 key和value组成一个“键值对”,其中键(key)是唯一的。

首先我们来看看哈希表的数据结构图
在这里插入图片描述
再看看哈希表的存储过程
在这里插入图片描述
再根据我们查字典的比喻来理解我们在哈希表查找我们需要的value对象,key就是这个字的拼音,哈希值就是这个字的页数,value就是这个字。
当我们要查一个value对象
①我们就需要知道它的key,就像我们查一个字要知道他的拼音
②经过特定的算法算出他的哈希值,就像通过拼音知道这个字在哪一页或者说在哪几页
③比如算出哈希值为1,那我们就只需要在哈希值为1的这些对象中一个一个去对比我们查的那个key对象,这样就找到了,就像我们在这个拼音的范围内去找这个字,只是我们查这个字的时候我们需要字是什么样子,而我们查key对应的value的时候我们不需要知道value,只要知道key就行在这里插入图片描述

三、HashMap

HashMap采用哈希算法实现,是Map接口最常用的实现类。由于底层采用了哈希表储存数据,我们要求键不能重复,新的键值对会替换旧的键值对。HashMap在查找、删除、修改方面都有非常高的效率。

下面我们用代码测试一下一些常用的方法:

public class TestMap {
	public static void main(String[] args) {
		Map<Integer,String> m1=new HashMap();
		
		m1.put(1, "one");//存
		m1.put(2, "two");
		
		System.out.println( m1.get(1));//取
		
		System.out.println(m1.size());//输出m1内存放的键值对数量
		System.out.println(m1.isEmpty());//m1容器是否为空
		System.out.println(m1.containsKey(2));//Map容器中是否包含值对象对应的键值对
		System.out.println(m1.containsValue("four"));//Map容器中是否包含键值对对应的值对象
		
		Map<Integer,String> m2=new HashMap<>();
		m2.put(4,"四");
		m1.put(5,"五");
		m1.putAll(m2);//将m2的所有键值对放到m1对象
		System.out.println(m1);
		
		//map中键不能重复!如果重复(是否重复是根据equals方法来判断),则新的覆盖旧的!
		m1.put(3, "三");
		System.out.println(m1);
	}
}

执行后的结果:
在这里插入图片描述

四、TreeMap

TreeMap的各种方法和HashMap的方法一样,TreeMap有一个功能就是自动排序,TreeMap会根据key的大小自增排序。

TreeMap和HashMap实现了同样的接口Map,因此,用法对于调用者来说没有区别。HashMap效率高于TreeMap;在需要排序的Map时才选用TreeMap。

五、感谢阅读

这是我自学Java基础,在b站看高淇老师的视频后的一些理解,其中有一部分也是引用了老师的东西,如果我的理解有错误希望可以提出,一起进步。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值