Java SortedMap接口及实例
SortedMap是集合框架中的一个接口。这个接口扩展了Map接口,并提供了其元素的总排序(元素可以按照键的排序顺序进行遍历)。实现这个接口的类是TreeMap。
SortedMap的主要特点是它按键的自然排序,或按指定的比较器排序。因此,当你想要一个满足以下条件的地图时,可以考虑使用TreeMap。
- 不允许出现空键或空值。
- 键是按自然排序或按指定的比较器排序的。
类型参数
- K – 这个地图所维护的键的类型
- V – 映射的值的类型
SortedMap的父接口是Map<K, V>。
SortedMap的子接口是ConcurrentNavigableMap<K, V>, NavigableMap<K, V>。
SortedMap是由ConcurrentSkipListMap, TreeMap实现的。
声明
例子
输出:
创建SortedMap对象
由于SortedMap是一个接口,所以不能创建SortedMap类型的对象。我们总是需要一个扩展这个列表的类来创建一个对象。而且,在Java 1.5中引入泛型后,还可以限制可以存储在SortedMap中的对象的类型。这个类型安全的地图可以定义为。
在SortedMap上执行各种操作
由于SortedMap是一个接口,它只能与实现该接口的类一起使用。 TreeMap 就是实现SortedMap接口的类。现在,让我们看看如何在TreeMap上执行几个常用的操作。
1.添加元素: 为了向SortedMap添加一个元素,我们可以使用 put() 方法。但是,在TreeMap中不保留插入顺序。在内部,对于每一个元素,键都是按照升序进行比较和排序的。
输出
2.改变元素: 在添加元素后,如果我们想改变元素,可以通过put()方法再次添加元素来完成。由于SortedMap中的元素是用键来索引的,所以键的值可以通过简单地插入我们想改变的键的更新值来改变。
输出
3.删除元素: 为了从SortedMap中删除一个元素,我们可以使用 remove() 方法。该方法接收键值,如果该键存在于地图中,则从该SortedMap中删除该键的映射。
输出
4.迭代排序后的Map: 有多种方法可以迭代Map。最著名的方法是使用一个增强的for循环并获得键。通过使用getValue()方法可以找到键的值。
输出
实现SortedMap接口的类是TreeMap 。
在集合框架中实现的TreeMap类是对SortedMap接口的实现,SortedMap扩展了Map接口。它的行为就像一个简单的地图,不同的是它以排序的方式存储键。TreeMap使用树形数据结构进行存储。对象以排序、升序的方式存储。但我们也可以通过传递一个比较器来以降序存储。让我们看看如何使用这个类来创建一个排序的Map对象。
输出
SortedMap接口的方法
方法 | 描述 |
---|---|
comparator() | 返回用于对该地图中的键进行排序的比较器,如果该地图使用其键的自然排序,则返回空。 |
entrySet() | 返回该地图中包含的映射的Set视图。 |
firstKey() | 返回当前该地图中的第一个(最低)键。 |
headMap(K toKey) | 返回此地图中键值严格小于toKey的部分的视图。 |
keySet() | 返回该地图中包含的键的Set视图。 |
lastKey() | 返回当前该地图中的最后一个(最高)键。 |
subMap(K fromKey, K toKey) | 返回该地图中键值范围从fromKey(包括)到toKey(不包括)的部分的视图。 |
tailMap(K fromKey) | 返回该地图中键值大于或等于fromKey的部分的视图。 |
values() | 返回该地图中包含的值的集合视图。 |
从java.util.Map接口继承的方法
方法 | 描述 |
---|---|
clear() | 该方法用于清除和删除指定的Map集合中的所有元素或映射。 |
containsKey(Object) | 这个方法用来检查一个特定的键是否被映射到地图中。 它以键元素为参数,如果该元素在地图中被映射,则返回True。 |
containsValue(Object) | 该方法用于检查一个特定的值是否被地图中的一个或多个键所映射。 它以值为参数,如果该值被地图中的任何一个键所映射,则返回True。 |
entrySet() | 该方法用于创建一个由地图中包含的相同元素组成的集合。它基本上返回一个地图的集合视图,或者我们可以创建一个新的集合并将地图元素存储到其中。 |
equals(Object) | 这个方法用于检查两个地图之间是否相等。它验证作为参数传递的一个地图的元素是否与这个地图的元素相等。 |
get(Object) | 该方法用于检索或获取由参数中提到的特定键映射的值。当地图不包含该键的映射时,它返回NULL。 |
hashCode() | 该方法用于为包含键和值的给定地图生成一个hashCode。 |
isEmpty() | 这个方法用来检查一个地图是否有任何关于键和值对的条目。如果没有映射存在,那么该方法返回true。 |
keySet() | 该方法用于返回该地图中包含的键的Set视图。这个集合是由地图支持的,所以地图的变化会反映在这个集合中,反之亦然。 |
put(Object, Object) | 这个方法用来把指定的值和这个地图中指定的键联系起来。 |
putAll(Map) | 该方法用于将指定地图中的所有映射复制到该地图中。 |
remove(Object) | 如果地图中存在某个键的映射,该方法用于从该地图中删除该键的映射。 |
size() | 该方法用于返回地图中可用的键/值对的数量。 |
values() | 这个方法用来从地图的值中创建一个集合。它基本上返回HashMap中数值的一个集合视图。 |