任何复杂的知识往往给人的感觉都是那么的不友好,所以,一定要静下心来,耐心去看、去读、去理解这些东西!!!
1.Map接口简介
说明:Map接口是一种双列集合,它的每个元素都包含一个键对象 Key 和值对象 Value,键和值对象之间存在一种对应关系,称为映射。 那什么是映射呢?在生活中,我们常常会看到这样的一种集合:账号——密码、IP地址——主机名、系统用户名——系统用户对象等。像这种一一对应的关系,就叫做映射。
特点:①Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)。
②Map集合中的元素,key 和 value 的数据类型可以相同,也可以不同。
③Map集合中的元素,key 是不允许重复的, value 是可以重复的。
④Map集合中的元素,key 和 value是一一对应的。
2.HashMap类简介
说明:HashMap 是 Map 接口的一个实现类,它用于存储键值映射关系,该集合的键和值允许为空,但键不能重复,且集合中的元素是无序的。
特点:HashMap 底层是由哈希表结构组成的,其实就是“数组+链表”的组合体,数组是 HashMap 的主体结构,链表则主要是为了解决哈希值冲突而存在的分支结构。正因为这样特殊的存储结构,HashMap 集合对于元素的增、删、改、查操作表现出的效率都比较高。
2.1 内部结构
2.2 存储原理
3.Map接口常用的方法
4.应用举例
import java.util.*; /*import java.util.Map; import java.util.HashMap; import java.util.Collection; import java.util.Set; import java.util.Iterator;*/ public class MapDemo { public static void main(String[] args) { //用多态的形式,创建一个hashmap集合,集合长度为16 Map<String,String> hashmap=new HashMap<String,String>(16); System.out.println("↓↓↓Map集合常用方法如下↓↓↓"); System.out.println("---------------------------------------------"); System.out.println("创建第一个空的hashmap集合,键、值类型均为String类:" + hashmap); System.out.println("---------------------------------------------"); hashmap.put("公共的","public"); hashmap.put("受保护的","protected"); hashmap.put("默认的","friendly"); hashmap.put("默认的","default");//覆盖这个键之前对应的值 hashmap.put("私有的","private"); System.out.println("向hashmap集合中添加键值对元素:" + hashmap); System.out.println("此时hashmap集合中键值对的个数为:" + hashmap.size()); System.out.println("---------------------------------------------"); System.out.println("获取hashmap集合中键\"公共的\"所映射的值:" + hashmap.get("公共的")); System.out.println("---------------------------------------------"); System.out.println("查看hashmap集合中是否存在键对象\"私有的\":" + hashmap.containsKey("私有的")); System.out.println("查看hashmap集合中是否存在值对象\"protected\":" + hashmap.containsValue("protected")); System.out.println("---------------------------------------------"); String str1=hashmap.remove("默认的"); System.out.println("将指定的键所对应的键值对元素移除,并返回该元素的值:" + str1); System.out.println("移除之后,hashmap集合为:" + hashmap); System.out.println("---------------------------------------------"); Set<String> set=hashmap.keySet(); System.out.println("以Set集合的形式返回hashmap集合中所有的键对象:" + set); System.out.println("---------------------------------------------"); Collection<String> collection=hashmap.values(); System.out.println("以Collection集合的形式返回hashmap集合中所有的值对象:" + collection); System.out.println("---------------------------------------------"); Set<Map.Entry<String,String>> setmap=hashmap.entrySet(); System.out.println("将hashmap集合转换为存储元素类型为Map的Set集合:" + setmap); System.out.println("---------------------------------------------"); System.out.println("Iterator迭代器遍历Map集合——keySet()方法:"); Set<String> setkey1=hashmap.keySet();//以Set集合的形式返回hashmap集合中所有的键对象 Iterator<String> iterator1=setkey1.iterator();//获取Set集合的迭代器对象,并遍历该迭代器对象 while(iterator1.hasNext()) { Object key1=iterator1.next();//获取键 Object value1=hashmap.get(key1);//通过键获取相应的值 System.out.println("键:" + key1 + ",值:" + value1); } System.out.println("---------------------------------------------"); System.out.println("Iterator迭代器遍历Map集合——entrySet()方法:"); Set<Map.Entry<String,String>> setkey2=hashmap.entrySet();//将hashmap集合转换为存储元素类型为Map的Set集合 Iterator<Map.Entry<String,String>> iterator2=setkey2.iterator();//获取Set集合的迭代器对象,并遍历该迭代器对象 while(iterator2.hasNext()) { //通过Entry对象的getKey()和getValue()方法,获取键和值 Map.Entry<String,String> kv=iterator2.next(); Object key2=kv.getKey(); Object value2=kv.getValue(); System.out.println("键:" + key2 + ",值:" + value2); } System.out.println("---------------------------------------------"); System.out.println("使用Lambda表达式的书写形式来遍历Map集合:"); //JDK 8新方法遍历Map集合(Lambda表达式特性),这里也可以使用for-each循环对hashmap集合进行遍历 hashmap.forEach((key,value)->System.out.println("键:" + key + ",值:" + value)); System.out.println("---------------------------------------------"); hashmap.clear(); System.out.println("清空hashmap集合中的所有键值对元素:" + hashmap); System.out.println("---------------------------------------------"); } }