|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.util.AbstractMap<K,V> java.util.TreeMap<K,V>
public class TreeMap<K,V>
SortedMap 接口的基于红黑树的实现。此类保证了映射按照升序顺序排列关键字,根据使用的构造方法不同,可能会按照键的类的自然顺序 进行排序(参见 Comparable),或者按照创建时所提供的比较器进行排序。
此实现为 containsKey、get、put 和 remove 操作提供了保证的 log(n) 时间开销。这些算法是 Cormen、Leiserson 和 Rivest 的《Introduction to Algorithms》中的算法的改编。
注意,如果有序映射要正确实现 Map 接口,则有序映射所保持的顺序(无论是否明确提供比较器)都必须保持与等号一致。(请参见与等号一致 的精确定义的 Comparable 或 Comparator。)这也是因为 Map 接口是按照等号操作定义的,但映射使用它的 compareTo(或 compare)方法对所有键进行比较,因此从有序映射的观点来看,此方法认为相等的两个键就是相等的。即使顺序与等号不一致,有序映射的行为仍然是 定义良好的;只不过没有遵守 Map 接口的常规约定。
注意,此实现不是同步的。如果多个线程同时访问一个映射,并且其中至少一个线程从结构上修改了该映射,则其必须 保持外部同步。(结构上修改是指添加或删除一个或多个映射关系的操作;仅改变与现有键关联的值不是结构上的修改。)这一般通过对自然封装该映射的某个对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap 方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的不同步访问,如下所示:
Map m = Collections.synchronizedMap(new TreeMap(...));
由所有此类的“collection 视图方法”所返回的迭代器都是快速失败 的:在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器自身的 remove 或 add 方法,其他任何时间任何方式的修改,迭代器都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就完全失败,而不是冒着在将来不确定的时间任意发生不确定行为的风险。
注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。
此类是 Java Collections Framework 的成员。
Map
,
HashMap
,
Hashtable
,
Comparable
,
Comparator
,
Collection
,
Collections.synchronizedMap(Map)
,
序列化表格构造方法摘要 | |
---|---|
TreeMap()
构造一个新的空映射,该映射按照键的自然顺序排序。 |
|
TreeMap(Comparator<? super K> c)
构造一个新的空映射,该映射根据给定的比较器进行排序。 |
|
TreeMap(Map<? extends K,? extends V> m)
构造一个新映射,包含的映射关系与给定的映射相同,这个新映射按照键的自然顺序 进行排序。 |
|
TreeMap(SortedMap<K,? extends V> m)
构造一个新的映射,包含的映射关系与给定的 SortedMap 相同,该映射按照相同的排序方式进行排序。 |
方法摘要 | |
---|---|
void |
clear()
从此 TreeMap 中删除所有映射关系。 |
Object |
clone()
返回 TreeMap 实例的浅表复制。 |
Comparator<? super K> |
comparator()
返回用于对此映射进行排序的比较器,如果此映射使用它的键的自然顺序,则返回 null。 |
boolean |
containsKey(Object key)
如果此映射包含对于指定的键的映射关系,则返回 true。 |
boolean |
containsValue(Object value)
如果此映射把一个或多个键映射到指定值,则返回 true。 |
Set<Map.Entry<K,V>> |
entrySet()
返回此映射所包含的映射关系的 set 视图。 |
K |
firstKey()
返回有序映射中当前第一个(最小的)键。 |
V |
get(Object key)
返回此映射中映射到指定键的值。 |
SortedMap<K,V> |
headMap(K toKey)
返回此映射的部分视图,其键严格小于 toKey。 |
Set<K> |
keySet()
返回此映射中所包含的键的 Set 视图。 |
K |
lastKey()
返回有序映射中当前最后一个(最大的)键。 |
V |
put(K key,
V value)
在此映射中关联指定值与指定键。 |
void |
putAll(Map<? extends K,? extends V> map)
将指定映射中所有映射关系复制到此映射中。 |
V |
remove(Object key)
如果此 TreeMap 中存在该键的映射关系,则将其移除。 |
int |
size()
返回此映射中的键-值映射关系数。 |
SortedMap<K,V> |
subMap(K fromKey,
K toKey)
返回此映射的部分视图,其键值从 fromKey(包括)到 toKey(不包括)。 |
SortedMap<K,V> |
tailMap(K fromKey)
返回映射的部分视图,其键大于或等于 fromKey。 |
Collection<V> |
values()
返回此 Map 中所包含的值的 collection 视图。 |
从类 java.util.AbstractMap 继承的方法 |
---|
equals, hashCode, isEmpty, toString |
从类 java.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
从接口 java.util.Map 继承的方法 |
---|
equals, hashCode, isEmpty |
构造方法详细信息 |
---|
public TreeMap()
Comparable
public TreeMap(Comparator<? super K> c)
c
- 用于对此映射进行排序的比较器。null 值指示应该使用键的自然排序。public TreeMap(Map<? extends K,? extends V> m)
m
- 映射,其映射关系将存放在此映射中。
ClassCastException
- t 中的键不是 Comparable 或者不是可相互比较的。
NullPointerException
- 如果指定的映射为 null。public TreeMap(SortedMap<K,? extends V> m)
m
- 有序映射,其映射关系将存放在此映射中,并且其比较器要用于对此映射进行排序。
NullPointerException
- 如果指定的有序映射为 null。方法详细信息 |
---|
public int size()
Map<K,V>
中的 size
AbstractMap<K,V>
中的 size
public boolean containsKey(Object key)
Map<K,V>
中的 containsKey
AbstractMap<K,V>
中的 containsKey
key
- 测试在此映射中存在与否的键。
ClassCastException
- 如果该键不能与映射中的当前键进行比较。
NullPointerException
- 键为 null 并且此映射使用自然排序,或者它的比较器不允许使用 null 键。public boolean containsValue(Object value)
Map<K,V>
中的 containsValue
AbstractMap<K,V>
中的 containsValue
value
- 要测试其在此 Map 中存在与否的值。
public V get(Object key)
Map<K,V>
中的 get
AbstractMap<K,V>
中的 get
key
- 要返回其关联值的键。
ClassCastException
- 键不能与在映射中的当前键进行比较。
NullPointerException
- 键为 null 并且此映射使用自然排序,或者它的比较器不允许使用 null 键。containsKey(Object)
public Comparator<? super K> comparator()
SortedMap<K,V>
中的 comparator
public K firstKey()
SortedMap<K,V>
中的 firstKey
NoSuchElementException
- 映射为空。public K lastKey()
SortedMap<K,V>
中的 lastKey
NoSuchElementException
- 映射为空。public void putAll(Map<? extends K,? extends V> map)
Map<K,V>
中的 putAll
AbstractMap<K,V>
中的 putAll
map
- 要存储在此映射中的映射关系。
ClassCastException
- 指定映射中的键或值的类不允许将键或值存储在此映射中。
NullPointerException
- 如果给定的映射为 null 或者此映射不允许使用 null 键,但是指定映射中的键为 null。public V put(K key, V value)
Map<K,V>
中的 put
AbstractMap<K,V>
中的 put
key
- 指定值将要关联的键。value
- 指定键将要关联的值。
ClassCastException
- 键不能与映射中的当前键进行比较。
NullPointerException
- 键为 null 并且此映射使用自然排序,或者它的比较器不允许使用 null 键。public V remove(Object key)
Map<K,V>
中的 remove
AbstractMap<K,V>
中的 remove
key
- 应该删除映射关系的键
ClassCastException
- 键不能和映射中的当前键进行比较。
NullPointerException
- 键为 null 并且此映射使用自然排序,或者它的比较器不允许使用 null 键。public void clear()
Map<K,V>
中的 clear
AbstractMap<K,V>
中的 clear
public Object clone()
AbstractMap<K,V>
中的 clone
Cloneable
public Set<K> keySet()
Map<K,V>
中的 keySet
AbstractMap<K,V>
中的 keySet
public Collection<V> values()
Map<K,V>
中的 values
AbstractMap<K,V>
中的 values
public Set<Map.Entry<K,V>> entrySet()
Map<K,V>
中的 entrySet
AbstractMap<K,V>
中的 entrySet
Map.Entry
public SortedMap<K,V> subMap(K fromKey, K toKey)
如果用户试图插入小于 fromKey 或大于等于 toKey 的键,那么此方法返回的有序映射将抛出 IllegalArgumentException。
注意:此方法总是返回 半开区间(包括它的低终结点而不包括高终结点)。如果需要一个闭区间(同时包括两个终结点),并且键类型允许计算给定键的后续值,则只需请求从 lowEndpoint 到 successor(highEndpoint) 的子区间。例如,假定 m 是用字符串作为键的有序映射。下面的语句得到一个包含 m 中键在 low 和 high(包括)之间所有键-值映射关系的视图:
SortedMap sub = m.submap(low, high+"\0");可以使用类似的技术生成开区间(两个终结点都不包括)。下面的语句将得到一个包含 m 中键在 low 和 high(不包括)之间的所有键-值映射关系的视图:
SortedMap sub = m.subMap(low+"\0", high);
SortedMap<K,V>
中的 subMap
fromKey
- subMpa 的低终结点(包括)。toKey
- subMap 的高终结点(不包括)。
ClassCastException
- 如果不能使用此映射的比较器(如果该映射没有比较器,使用自然排序)比较 fromKey 和 toKey。
IllegalArgumentException
- 如果 fromKey 大于 toKey。
NullPointerException
- 如果 fromKey 或 toKey 为 null,并且此映射使用自然排序,或者其比较器不允许使用 null 键。public SortedMap<K,V> headMap(K toKey)
如果用户试图插入大于或等于 toKey 的键,那么由此方法返回的有序映射将抛出 IllegalArgumentException。
注:此方法总是返回不包括(高)终结点的视图。如果需要不包含此终结点的视图,并且键类型允许计算给定键的后续值,则只需要请求以 successor(highEndpoint) 为界的 headMap。例如,假定 m 是用字符串作为键的有序映射。下面的语句将得到一个包含 m 中键小于或等于 high 的所有键-值映射关系的视图:
SortedMap head = m.headMap(high+"\0");
SortedMap<K,V>
中的 headMap
toKey
- headMap 的高终结点(不包括)。
ClassCastException
- 如果 toKey 与此映射的比较器不兼容(如果映射没有比较器,并且 toKey 没有实现 Comparable)。
IllegalArgumentException
- 如果此映射本身是一个 subMap、headMap 或 tailMap,并且 toKey 不在 subMap、headMap 或 tailMap 指定的范围之内。
NullPointerException
- 如果 toKey 为 null,并且此映射使用自然排序,或者其比较器不允许使用 null 键。public SortedMap<K,V> tailMap(K fromKey)
如果用户试图插入小于 fromKey 的键,则由此方法返回的有序映射将抛出 IllegalArgumentException。
注:此方法总是返回包括(低)终结点的视图。如果需要不含此终结点的视图,并且元素类型允许计算给定值的后续值,则只需要请求以 successor(lowEndpoint) 为界的 headMap。例如,假定 m 是用字符串作为键的有序映射。下面的语句将得到一个包含 m 中键严格大于 low 的所有键-值映射关系的视图:
SortedMap tail = m.tailMap(low+"\0");
SortedMap<K,V>
中的 tailMap
fromKey
- tailMap 的低终结点(包括)。
ClassCastException
- 如果 fromKey 与此映射的比较器不兼容(如果映射没有比较器,并且 fromKey 没有实现 Comparable)。
IllegalArgumentException
- 如果此映射本身是一个 subMap、headMap 或 tailMap,并且 fromKey 不在 subMap、headMap 或 tailMap 指定的范围之内。
NullPointerException
- 如果 fromKey 为 null,并且此映射使用自然排序,或者其比较器不允许使用 null 键。
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。