在java.util中还增加了映射(Map)。映射是一个存储关键字和值的关联,或者说是“关键字/值”对的对象,即给定一个关键字,可以得到它的值。关键字和值都是对象,关键字必须是唯一的,但是可以存在相同的值。有的映射可以接收null关键字和null值,有的则不能。
可以将Map视为偶对象保存接口。Collection每一次只保存一个对象,而Map保存的是一对对象,而且这一对对象一定是按照“Key = Value”的形式保存,也就是说,可以通过Key找到对应的Value,那么这就好比使用电话本一样: ⑴ Key = 张三,Value = 110; ⑵ Key = 李四,Value = 120; 如果说现在要想找到张三的电话,那么首先应该通过张三这个Key,然后找到其对应的Value——110,如果现在保存的数据之中没有对应的Key,那么就返回null。
下表给出了支持映射的接口:
一、Map 接口
Map接口映射唯一关键字到值。关键字(key)是以后用于检索值的对象。给定一个关键字和一个值,可以存储这个值到一个Map对象中。当这个值被存储以后,就可以使用它的关键字来检索它。
Map的方法总结在下表中:
注意事项
(1)当调用的映射中没有项存在时,其中的几种方法会引发一个NoSuchElementException异常。 (2)当对象与映射中的元素不兼容时,则会引发一个ClassCastException异常。 (3)如果试图使用映射不允许使用的null对象,则会引发一个NullPointerException异常。 (4)当试图改变一个不允许修改的映射时,则会引发一个UnsupportedOperationException异常。
映射不是类集,但可以获得映射的类集“视图”。为了实现这种功能,可以使用entrySet( )方法,它返回一个包含了映射中元素的集合(Set)。为了得到关键字的类集“视图”,可以使用keySet( )方法。为了得到值的类集“视图”,可以使用values()方法。类集“视图”是将映射集成到类集框架内的手段。
二、SortedMap 接口
SortedMap接口扩展了Map,它确保了各项按关键字升序排序。
由SortedMap说明的方法总结在下表中:
注意事项
(1)当调用映射中没有的项时,其中的几种方法将引发一个NoSuchElementException异常。 (2)当对象与映射中的元素不兼容时,则会引发一个ClassCastException异常。 (3)当试图使用映射不允许使用的null对象时,则会引发一个nullPointerException异常。
三、Map.Entry 接口
Map.Entry接口使得可以操作映射的输入。
如由Map接口说明的entrySet( )方法,调用该方法可返回一个包含映射输入的集合(Set),这些集合元素的每一个都是一个Map.Entry对象。
下表总结了由该接口说明的方法:
四、映射类
AbstractMap对3个具体的映射实现来说,是一个超类。AbstractMap的另一个子类——WeakHashMap实现一个使用“弱关键字”的映射,它允许映射中的元素,当该映射的关键字不再被使用时,被放入回收站。
1、HashMap 类
HashMap类使用散列表实现Map接口,它是Map接口中最为常用的子类。
HashMap允许一些基本操作,如get( )和put( )的运行时间保持恒定,即便对大型的集合也是这样的。下面的构造方法定义为:
(1)HashMap( ) :构造一个默认的散列映射。 (2)HashMap(Map m) :用