集合中的Map接口

2 篇文章 0 订阅
1 篇文章 0 订阅

集合中的Map接口

最最最重要的一件事就是不要害怕去学习Map接口,在这之前,我也一样,就是那种一看就会,一做就费,所以耐心的看完它,然后动手实践一下,你就会获得很多哦!

今天们来聊一聊关于Map集合的那些事儿,我们在平时的学习中用于保存数据使用更多的是数组,因为他简单,但是随着学习的持续推进你就会发现我们需要存储的数据越来越多,所以数组我们就发现了数组的很多缺点:

  • 数组长度固定不变,不能很好的适应元素数量动态变化的情况
  • 可以通过数组名.length获取数组的长度,却无法直接获取数组中实际存储的元素个数
  • 数组采用在内存中分配连续空间的存储方式存储,根据元素信息查找时效率比较低,需要多次比较

所以为了解决这个问题又产生了集合这个概念, 集合他比数组更加灵活,更加实用,而大大提高软件的开发效率,并且不同的集合可以应用于不同的应用场合,如果你想尝试讲一个数组转换为一个集合,可以点这里哦数组和集合的相互转换

接下来我们先来聊一聊关于Map集合的故事。

​ Map接口存储一组成对的键(key)-值(value)对象,提供key到value的映射,通过key来检索,Map接口中的key不要求有序,不允许重复,value同样不要求有序,但允许重复,这是一个Map接口的框架,你先瞅一瞅

一:Map接口框架

在这里插入图片描述

二:Map接口的常用实现类

  • HashMap<K,V>:

    底层采用的"哈希表"结构,元素的 "存取无序"    (HashSet的底层其实是借助了HashMap实现存储)
         
    要保证键的 "唯一、不重复" , "需要重写键的hashCode()方法、equals()方法"
    
  • TreeMap<K,V> :

    TreeMap集合底层的数据结构是"红黑树":可以对元素的键进行排序
    
    排序方式有两种:"自然排序","比较器排序"(键的排序规则与TreeSet一样)
    

三:Map接口的常用方法。

方法说明
Object put(Object key,Object value)将互相关联的一个key与一个value访放入该集合,如果Map接口中已经包含了key对应的value,则旧值将被替换
Object remove(Object key)从当前集合中移除与指定key 相关的映射,并返回该key关联的旧value,如果key没有任何关联,则返回null
Object get(Object key)获得与key相关的value,如果该key不关联任何非null值,则返回null
boolean containskey(Object key)判断集合中是否存在key
boolean containsValue(Object value)判断集合中是否存在value
boolean isEmpty()判断集合是否为空
void clear()清除集合中所有元素
int size()返回集合中元素的数量
Set keySet()获取所有key的集合
Set entrySet获取键集,每个键仅会遍历一次,不保证按顺序遍历

四:常用方法的使用

(1) Object put(Object key,Object value)

将互相关联的一个key与一个value访放入该集合,如果Map接口中已经包含了key对应的value,则旧值将被替换

private static void Test() {
		HashMap<Integer, String> hm=new HashMap<Integer, String>();
		//使用put()方法向集合中添加键值对
		hm.put(121, "卤蛋");
		hm.put(122, "貂蝉");
		hm.put(123, "赵云");
		hm.put(124, "张飞");
		System.out.println(hm);
//    {121=卤蛋, 122=貂蝉, 123=赵云, 124=张飞}
}   
        hm.put(121, "凯爹");
		System.out.println(hm);
//  {121=凯爹, 122=貂蝉, 123=赵云, 124=张飞}
//在这里我们可以看到,如果再次添加元素的键重复了,他就会覆盖之前key相对应的值,卤蛋->凯爹

 /*         Map添加元素的特点:
                 1.键不允许重复,添加时如果键相同,值会替换,键不变
                 2.值可以重复
 */

在这里插入图片描述

注意啦:下面的方式举例是在这个基础上实现的,因为这样就不需要每次添加元素了

(2) Object get(Object key)

获得与key相关的value,如果该key不关联任何非null值,则返回null

//V get(Object key):根据指定的键,在Map集合中获取对应的值
		String nameOne=hm.get(122);
		String nameTwo=hm.get(155);
		System.out.println("key为122所对应的值是"+nameOne);
		System.out.println("key为155所对应的值是"+nameTwo);
//获取元素,由键得值,如果存在就输出key所对应的值,如果不存在就输出null

在这里插入图片描述

(3)Object remove(Object key)

从当前集合中移除与指定key 相关的映射,并返回该key关联的旧value,如果key没有任何关联,则返回null

//V remove(Object key):根据键删除键值对元素,返回被删元素的值,没有返回null
		String nameOne=hm.remove(124);
		String nameTwo=hm.remove(166);
		System.out.println("根据key为124删除的元素是"+nameOne);
		System.out.println("根据key为166删除的元素是"+nameTwo);

在这里插入图片描述

(4) boolean containskey(Object key)

判断集合中是否存在key

//boolean containskey(Object key) ,判断集合中是否包含指定的键,有返回true,没有返回false
 		boolean existOne=hm.containsKey(123);
		System.out.println("key为123存在吗?"+existOne);
		boolean existTwo=hm.containsKey(89);
		System.out.println("key为89存在吗?"+existTwo);

在这里插入图片描述

(5)boolean containsValue(Object Value)

判断集合中是否存在value

他与上一个方式是一样的,一个查询是否存在键,一个查询是否存在值,大家可以参考上一个例子

(6)boolean isEmpty()

判断集合是否为空

//判断集合是否为空,为空输出true,不为空输出true
System.out.println(hm.isEmpty());

在这里插入图片描述

(7)void clear()

清除集合中所有元素

hm.clear();
System.out.println(hm);
//结果:
//{}

在这里插入图片描述

(8) int size()

返回集合中元素的数量

int size=hm.size();
System.out.println(size);
//结果
//4

在这里插入图片描述

遍历集合的两种方式

方式一:

(9) Set keySet()

获取所有key的集合

//建立一个key的集合
		Set<Integer> keySet=hm.keySet();
//根据遍历每一个key,然后get()到每一个键所对应的值		
		for (Integer key : keySet) {
			//获取每个键对应的值
			String value=hm.get(key);
			System.out.println(key+":"+value);
		}

在这里插入图片描述

方式二:

(9) Set entrySet

获取键集,每个键仅会遍历一次,不保证按顺序遍历

        //1.获取键值对的集合,(Entry集合)

        /*
             Set<>  : Set集合
             Map.Entry<String, String>:集合的元素
             String,String :键和值的类型
         */
         
       Set<Map.Entry<Integer, String>> entrySet=hm.entrySet();
		//增强for循环:for(数据类型 每个元素:元素的集合){}
			for (Entry<Integer, String> entry : entrySet) {
				//获取每个entry对象的键
				Integer key=entry.getKey();
				//获取每个entry对象的值
				String value=entry.getValue();
				System.out.println("键:"+key+","+"值:"+value);
			}

在这里插入图片描述

集合的功能很强大,方法也很多,所以他的使用用途很多,大家记得多多去练习哦,工欲善其事,必先利其器。今天的知识就分享到这儿了,有啥问题记得私信我哦!

 今天是持续写作的第 4 / 200 天。可以点赞、评论、收藏啦。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值