Map<接口>
映射(map)是存储键和值间关联(即,键值对)的对象。给定一个键,可以找到其值。键和值都是对象。键必须唯一,但是值可以重复。
13.1 支持映射的接口
接 口 | 描 述 |
---|---|
Map | 将唯一键映射到值 |
NavigableMap | 扩展SortedMap接口,以处理基于最接近匹配搜索原则的键/值对检索 |
SortedMap | 扩展Map接口,从而以升序保存键 |
Map.Entry | 描述映射中的元素(键/值对) |
interface Map<K, V>
映射围绕两个基本操作:get()和put()。为了将值放入到映射中,使用put(),指定键和值。为了获取值,调用get(),传递键作为变元,值会被返回。
13.2 映射类
常用的映射类:HashMap、LinkedHashMap、TreeMap
13.2.1 HashMap
HashMap实现了Map接口。它使用哈希表存储映射,即使对于比较大的集合,get()和put()的执行时间也保持不变。其声明如下:
class HashMap<K, V>
HashMap类定义了以下构造方法:
HashMap( )
HashMap(int capacity) //指定容量,默认是16
HashMap(int capacity, float fillRatio) //充填比率,0.0-1.0之间,默认0.75
HashMap(Map<? extends K, ? extends V> m)
Hashtable类也实现了Map接口,与HashMap类似。
主要区别:
1、Hashtable是同步的、线程安全的,而HashMap不是同步的,没有实现线程安全。
2、HashMap允许将null作为一个条目的key或者value,而Hashtable不允许。当然只能有一个条目的键为null。
//添加 键不能重复,如果已经存在 新的值会覆盖
map.put( . )
//取值
map.get()
//条数
map.size()
//修改
可以用map.put 健相同直接覆盖
//删除
map.ramove(键)
//先遍历键 在去找值 Set<String> strings = map. keySet () ; for (String str : strings) [ System. out. println(str) ; String s = map.get (str) ; System. out. println(s. length ()) : }
13.2.2 LinkedHashMap
LinkedHashMap扩展了 Hashmap类,该类在内部使用一个表维护条目添加到 映射中的顺序,从而可以按照插入顺序选代整个映射
13.2.3 TreeMap
TreeMap类扩展了 AbstractMap[类,并实现了
NavigableMap 接口。该类使用树 接口存储条目。TreeMap提供了有序存储键/值对的高效手段,并支持快速检索。应 当注意,TreeMap 确保其元素以键的升序存储
13.2.4Hashtable
Hashtable类也实现了 Map 接口与 HashMap类似。
主要区别: 1、Hashtable是同步的、线程安全的,而 HashMap 不是同步的,没有实现线程 安全。 2、HashMap 允许将 nui 作为一个条目的 key 或者 value,而 Hashtable不允许。 当然只能有一个条目的键为 nul1。 3、HashMap把 Hashtable 的 contains 方法去掉了,改成 containsvalue和 contaimsKey。因为 contains 方法容易让人引起误解。
13.3Map的遍历
映射不是集合,没有实现 Collection 接口。因此不能直接遍历映射。
Entry 接口是在 Map 接口的内部定义的,是内部接口。 在Map 中存储的元素是键-值对,一个键值对作为一个整体使用 Map.Entry 接口 表示。Map.Entry定义的方法:
使用entrvSet0方法,返回包含映射中所有元素(键-值对)的 Set 对象 使用 kexSet0,返回包含映射中所有键的 Set 对象。 使用 values0,返回包含映射中所有值的 Collection 对象 对于这三个集合视图都是基于映射的,修改其中的一个集合会影响其他集合。