Map的使用与实现

基本概念和使用场景

Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有:

  1. 直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢
  2. 二分查找,时间复杂度为,但搜索前必须要求序列是有序的

上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,而现实中的查找可能会在查找时进行一些插入和删除的操作,即动态查找,那上述两种方式就不太适合了,这时就需要使用Map和Set这两种适合动态查找的集合容器。
所以map和set是两种用来搜索查找的集合类。

存储模型

一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,所以存储元素的模型会有两种:K-V模型和纯K模型。

  1. 纯K模型:也就是在一个空间里只存放关键字,不存放与之对应的值,搜索时也只是使用关键字进行搜索。例如:在词典中找一个单词
  2. K-V模型:既存放关键字Key,同时也存放与之对应的值,在空间中的存储形式是键值对<key,value>的形式,例如:统计一个文件中单词出现的次数—> <单词,次数> <单词,中文含义>。

Map

  1. Map是一个接口,没有继承Collection;
  2. Map中存储的是键值对(K-V模型),并且要求K不能重复(V是可以重复的),且K不能为空,否则会抛出异常,但是V可以为空;
  3. Map中键值对的体现:在Map内部定义Entry(实体)接口,该接口中包含有K,V,该内部类中主要提供了<key, value>的获取,value的设置以及Key的比较方式;
    注意: Map.Entry<K,V>并没有提供设置Key的方法
  4. Map接口包含的方法:
    在这里插入图片描述
    其中,
    containKey():时间复杂度:O(logN)
    containValue():时间复杂度:O(N)
  5. Map中的Key不能直接修改,value可以直接修改;如果要修改key,只能先将该key删除掉,再重新插入;
  6. Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap;
  7. TreeMap或者HashMap的共同点:都存储的是键值对,都实现了Map接口;
  8. TreeMap或者HashMap的区别:
    在这里插入图片描述
  9. 分别用hashmap和treemap实例化map,代码实现:
	public static void testTreeMap(){
   
        Map<String,String> m1 = new TreeMap<>();
        m1.put("apple","苹果");
        m1.put("orange","橘子");
        m1.put("peach","桃");
        System.out.println(m1.size());
        System.out.println(m1);
        
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值