|
前言:在Java编程语言中,集合框架(CollectionFramework)提供了一系列用于存储和操作数据的接口和类。其中,Map和Set是两个非常重要的接口,分别用于存储键值对和无重复元素的集合。✨✨✨这里是秋刀鱼不做梦的BLOG✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客先让我们看一下本文大致的讲解内容:目录1.Map概念简介 (1)Map的定义 (2)Map.Entry的说明,> (3)Map类在Java集合类中的关系2.Map接口中常用API3.Map的常见实现类 (1)HashMap (2)LinkedHashMap (3)TreeMap4.Map的实际案例5.总结1.Map概念简介 (1)Map的定义 在开始学习如何使用Java中的Map类之前,先让我们了解一下什么是Java中的Map类: ——Map类是Java集合框架中的一部分,用于存储键值对(key-valuepairs)。每个键(key)对应一个值(value),键是唯一的,但值可以重复。常见的Map实现类包括HashMap、LinkedHashMap、TreeMap。 这里我们也附上官方文档中对Map的解释:Map(JavaPlatformSE8) 我相信读者如果初次学习Java中的Map类的话,可能对上面对Java中Map类的解释不能很好的理解,不过没有关系,读者继续向下阅读即可。 (2)Map.Entry的说明 对于Map这种数据结构而言,其底层可以简单的理解为是由一个个节点进行构成的的树,而Map.Entry就是其每一个节点。 对于Map.Entry来说,其是Map内部实现的用来存放键值对映射关系的内部类,该内部类中主要提供了的获取,value的设置以及Key的比较方式:方法解释KgetKey()返回entry中的keyVgetValue()返回entry中的valueVsetValue(Vvalue)将键值对中的value替换为指定value (3)Map类在Java集合类中的关系 了解了Map的定义与Map.Entry之后,在让我们看看Map在Java集合类中的关系,如下图:从图中我们可以看出,Map类不在实现Collection接口,而是实现Map自身接口。 ——通关上边的学习了解之后,这样我们就大致的了解了Java中的Map究竟是什么东西了。2.Map接口中常用API Map接口提供了一些基本的方法,用于操作键值对。以下是Map接口的主要方法:方法解释Vget(Objectkey)返回key对应的valueVgetOrDefault(Objectkey,VdefaultValue)返回key对应的value,key不存在,返回默认值Vput(Kkey,Vvalue)设置key对应的valueVremove(Objectkey)删除key对应的映射关系SetkeySet()返回所有key的不重复集合Collectionvalues()返回所有value的可重复集合Set>entrySet()返回所有的key-value映射关系booleancontainsKey(Objectkey)判断是否包含keybooleancontainsValue(Objectvalue)判断是否包含value这里我们对上述方法进行逐一使用代码进行解释:importjava.util.HashMap;importjava.util.Map;importjava.util.Set;importjava.util.Collection;publicclassMapMethodsExample{publicstaticvoidmain(String[]args){//创建一个HashMap实例Mapmap=newHashMap();//Vput(Kkey,Vvalue):设置key对应的valuemap.put("apple",1);map.put("banana",2);map.put("orange",3);//Vget(Objectkey):返回key对应的valueIntegerappleValue=map.get("apple");System.out.println("Valuefor'apple':"+appleValue);//VgetOrDefault(Objectkey,VdefaultValue):返回key对应的value,key不存在,返回默认值IntegermangoValue=map.getOrDefault("mango",0);System.out.println("Valuefor'mango':"+mangoValue);//Vremove(Objectkey):删除key对应的映射关系IntegerremovedValue=map.remove("banana");System.out.println("Removedvaluefor'banana':"+removedValue);System.out.println("Mapafterremoving'banana':"+map);//SetkeySet():返回所有key的不重复集合Setkeys=map.keySet();System.out.println("Keys:"+keys);//Collectionvalues():返回所有value的可重复集合Collectionvalues=map.values();System.out.println("Values:"+values);//Set>entrySet():返回所有的key-value映射关系Set>entries=map.entrySet();System.out.println("Entries:"+entries);//booleancontainsKey(Objectkey):判断是否包含keybooleancontainsApple=map.containsKey("apple");System.out.println("Containskey'apple':"+containsApple);//booleancontainsValue(Objectvalue):判断是否包含valuebooleancontainsValue2=map.containsValue(2);System.out.println("Containsvalue2:"+containsValue2);}} 这样我们就大致的了解了Java中有关Map的API了!3.Map的常见实现类 在Java汇总,常见的Map实现类包括HashMap、LinkedHashMap、TreeMap。 (1)HashMap HashMap是最常用的Map实现类,基于哈希表实现。它允许使用null键和null值,但不保证映射的顺序。其主要特点包括:线程不安全:多个线程同时访问时需要手动同步。无序:不保证键值对的插入顺序。高效:大多数操作的时间复杂度为O(1)。以下为其代码演示:importjava.util.HashMap;importjava.util.Map;publicclassHashMapExample{publicstaticvoidmain(String[]args){MaphashMap=newHashMap();//添加键值对hashMap.put("Apple",10);hashMap.put("Banana",20);hashMap.put("Orange",30);hashMap.put("Apple",40);//重复键将覆盖之前的值//获取值intvalue=hashMap.get("Apple");System.out.println("Valuefor'Apple':"+value);//判断是否包含键booleancontainsKey=hashMap.containsKey("Banana");System.out.println("Containskey'Banana':"+containsKey);//判断是否包含值booleancontainsValue=hashMap.containsValue(20);System.out.println("Containsvalue20:"+containsValue);//遍历键值对for(Map.Entryentry:hashMap.entrySet()){System.out.println(entry.getKey()+":"+entry.getValue());}//删除键值对hashMap.remove("Orange");//清空映射hashMap.clear();//判断是否为空booleanisEmpty=hashMap.isEmpty();System.out.println("Isempty:"+isEmpty);}} (2)LinkedHashMap LinkedHashMap继承自HashMap,并且在内部使用双向链表维护键值对的插入顺序。因此LinkedHashMap是有序的Map实现类。其主要特点包括:维护插入顺序或访问顺序。其他特性与HashMap相同。以下为其代码演示:importjava.util.LinkedHashMap;importjava.util.Map;publicclassLinkedHashMapExample{publicstaticvoidmain(String[]args){MaplinkedHashMap=newLinkedHashMap();//添加键值对linkedHashMap.put("Apple",10);linkedHashMap.put("Banana",20);linkedHashMap.put("Orange",30);linkedHashMap.put("Apple",40);//重复键将覆盖之前的值//遍历键值对for(Map.Entryentry:linkedHashMap.entrySet()){System.out.println(entry.getKey()+":"+entry.getValue());}}} (3)TreeMap TreeMap是基于红黑树实现的有序Map,它的键按照自然顺序或自定义比较器的顺序排序。其主要特点包括:保证键的排序顺序。其他特性与HashMap相似,但TreeMap的操作时间复杂度为O(logn)。以下为其代码演示:importjava.util.Map;importjava.util.TreeMap;publicclassTreeMapExample{publicstaticvoidmain(String[]args){MaptreeMap=newTreeMap();//添加键值对treeMap.put("Apple",10);treeMap.put("Banana",20);treeMap.put("Orange",30);treeMap.put("Apple",40);//重复键将覆盖之前的值//遍历键值对for(Map.Entryentry:treeMap.entrySet()){System.out.println(entry.getKey()+":"+entry.getValue());}}}这样我们就大致的了解了Map中常见实现类了!4.Map的实际案例 在学习完了Map概念简介、Map接口中常用API与Map的常见实现类之后,现在让我们看一下使用Map的实际案例来进一步加深对Java中Map类的理解: 以下示例展示了如何使用Map统计一段文本中每个单词出现的频率:importjava.util.HashMap;importjava.util.Map;publicclassWordFrequency{publicstaticvoidmain(String[]args){Stringtext="Thisisasampletext.Thistextisfordemonstrationpurposes.";//统计单词频率MapwordCount=newHashMap();String[]words=text.split("\\s+");for(Stringword:words){word=word.toLowerCase().replaceAll("[^a-zA-Z]","");if(!word.isEmpty()){wordCount.put(word,wordCount.getOrDefault(word,0)+1);}}//打印结果for(Map.Entryentry:wordCount.entrySet()){System.out.println(entry.getKey()+":"+entry.getValue());}}} ——这样我们即完成了对一段文本中每个单词出现的次数的统计。5.总结 Map接口及其实现类在Java编程中扮演着重要角色。通过本文的介绍,相信读者能更好地理解Map的概念、常用方法及其在实际应用中的使用。HashMap提供了高效但无序的存储,LinkedHashMap维护插入顺序,TreeMap提供了有序存储。 选择合适的Map实现类取决于具体需求,例如是否需要保证键的顺序或是否需要线程安全。以上就是本篇文章的全部内容了!!!
|
|