集合中的Map接口

发布于:2022-12-23 ⋅ 阅读:(572) ⋅ 点赞:(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 天。可以点赞、评论、收藏啦。

网站公告

今日签到

点亮在社区的每一天
去签到