Map接口是和Collection接口并列的另一种结构,提供了键值对的存储能力,即key-value。可以把键值对理解为一种一对一映射的关系,如“名字”对应“年龄”、“国家名”对应“地域”。Map中的key是不能重复的,就像现实生活中不会出现重复的人一样。Map中的每个key只能是一对一映射一个value,就像现实生活中一个人只能对应一个实际的年龄。
Map接口不是一开始就存在的,最开始的Java提供了一个抽象类Dictionary(字典类)来提供键值对存储的能力,但是实际上并不好用,于是Dictionary类被废弃,由Map接口替代。
Map中的key和value是成对一起出现的,Java中提供了Map.Entry<K,V>接口来描述它们,每个Entry中都有唯一的key和它映射的value值。Map中提供了entrySet()方法来获取所有的Entry集合,这里之所以是Set,也是因为Set集合中不会存在重复的元素。
表11.5.1 Map类中的常用方法
(www.xing528.com)
提示
Map类和Collection类一样,只是一个接口类,并没有提供具体的方法实现。每个方法的实现是在具体的实现类中完成的,如HashMap、TreeMap类。Map在使用时,会对一些异常操作抛出异常,比如访问的值不存在时,方法会抛出NoSuchElementException异常,对象类型与Map中存储的元素类型不兼容时,会抛出ClassCastException,这也是因为类型转换出错而抛出的异常。
另外,Map和其他Collection类一样,可以扩展到多维,如Map<String,Map<String,String>>创建了一个key为String类型,value为一个由String-String键值对构成的Map集合。这种扩展在Java中很常见,可以快速地生成各类数据结构。
Map是在java.util包中提供的,具体实现类有AbstractMap、HashMap、TreeMap、HashTable、LinkedHashMap、EnumMap等。本节将对常用的HashMap类和TreeMap类进行详细介绍,对其他实现类的使用场景感兴趣的读者可以查阅其他相关资料。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。