如今java中的字典实现都是通过Map接口实现的。
定义一个字典:(关键字是字符类型,值是int类型)
Map<Character,Integer> map = new HashMap();
常用的方法:
序号 | 方法描述 |
1 | Enumeration elements( ) 返回此 dictionary 中值的枚举。 |
2 | Object get(Object key) 返回此 dictionary 中该键所映射到的值。 |
3 | boolean isEmpty( ) 测试此 dictionary 是否不存在从键到值的映射。 |
4 | Enumeration keySet( ) 返回此 dictionary 中的键的枚举。 |
5 | Object put(Object key, Object value) 将指定 key 映射到此 dictionary 中指定 value。添加键值对,若键已存在,则覆盖旧值。 |
6 | Object remove(Object key) 从此 dictionary 中移除 key (及其相应的 value)。 |
7 | int size( ) |
8 | Map.getOrDefault(Object key, V defaultValue) 当Map集合中有这个key时,就使用这个key值;如果没有就使用默认值defaultValue。返回key的原来的值。 |
使用迭代器访问字典:
生成迭代器:Iterator<Map.Entry<Character,Integer>> iter=map.entrySet().iterator();
map的迭代器,用作遍历map中的每一个键值对
Iterator是迭代器,map之前应该定义过,姑且认为是HashMap。
Map.Entry<Character,Integer>表示map中的键值对是Character和Integer类型的。
map.entrySet()是把HashMap类型的数据转换成集合类型。
map.entrySet().iterator()是去获得这个集合的迭代器,保存在iter里面。
迭代器这么用:
while(iter.hasNext()) {
Entry obj = it.next();//就能获得map中的每一个键值对了
}
Iterator<String> iter;//声明一个迭代器,泛型里面是String类型,表示迭代元素是String类型的。
Iterator<Entry<String,String>> iter;//而你提供的要稍微复杂一点,迭代元素本身就是一个Entry键值对,
Entry<String,String>表示其key值是String,value值也是String。
HashSet set=map.entrySet();//将map类型数据转换成集合set类型的。
iter=set.iterator();//获得集合的迭代器。迭代器只针对集合类型的数据,
因此map类型的必须先转换成集合类型才能使用迭代器去获取元素。
keySet获得的只是key值的集合,
values获得的是value集合,
entryset获得的是键值对的集合。
关于 Map.Entry 接口
Map 的 entrySet() 方法返回一个实现 Map.Entry 接口的对象集合。集合中每个对象都是底层 Map 中一个特定的键 / 值对。通过这个集合的迭代器,您可以获得每一个条目 ( 唯一获取方式 ) 的键或值并对值进行更改。
(1) Object getKey(): 返回条目的关键字
(2) Object getValue(): 返回条目的值
(3) Object setValue(Object value): 将相关映像中的值改为 value ,并且返回旧值
当条目通过迭代器返回后,除非是迭代器自身的 remove() 方法或者迭代器返回的条目的 setValue() 方法,其余对源 Map 外部的修改都会导致此条目集变得无效,同时产生条目行为未定义。