Java NavigableMap

时间:2020-01-09 10:35:48  来源:igfitidea点击:

Java NavigableMap接口java.util.NavigableMap是Java SortedMap接口的子接口。 " NavigableMap"界面具有对" SortedSet"界面的一些扩展,从而可以导航存储在地图中的键和值。在本Java NavigableMap教程中,我将仔细研究这些导航方法。

NavigableMap实现

作为一个接口,我们需要使用JavaNavigableMap的实现才能使用它。 java.util包只有一个NavigableMap接口的实现:java.util.TreeMap类。 java.util.concurrent包中也有一个JavaNavigableMap实现,但这超出了本教程的范围。

创建一个NavigableMap

要创建Java NavigableMap,我们必须创建实现" NavigableMap"接口的类之一的实例。这是创建实现NavigableMap接口的JavaTreeMap类实例的示例:

NavigableMap navigableMap = new TreeMap();

使用比较器创建NavigableMap

可以将" Comparator"实现传递给" TreeMap"构造函数。然后,该"比较器"将用于对存储在" NavigableMap"中的键,值对的键进行排序。这是一个用Comparator创建Java TreeMap的示例:

Comparator comparator = new MyComparatorImpl();

SortedMap sortedMap = new TreeMap(comparator);

DescendingKeySet()

" NavigableMap"的第一个有趣的导航方法是" descendingKeySet()"方法。 descendingKeySet()方法返回一个NavigableSet,其中元素的顺序与原始键集相反。返回的"视图"由原始的" NavigableSet"键集支持,因此降序键集的更改也反映在原始集中。

这是一个简单的NavigableMap``descendingKeySet()示例:

NavigableSet reverse = map.descendingKeySet();

降落地图()

第二种有趣的导航方法是descendingMap()方法。 descendingMap()方法会返回一个" NavigableMap",它是原始" Map"的视图。此视图映射中元素的顺序与原始映射的顺序相反。作为原始地图的视图,对该视图的任何更改也会反映在原始地图中。

这是一个简单的NavigableMap``descendingMap()示例:

NavigableMap descending = map.descendingMap();

headMap()

headMap()方法返回原始NavigableMap的视图,该视图仅包含"小于"给定元素的元素。这是一个例子:

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");

//this headmap1 will contain "1" and "2"
SortedMap headmap1 = original.headMap("3");

//this headmap2 will contain "1", "2", and "3" because "inclusive"=true
NavigableMap headmap2 = original.headMap("3", true);

tailMap()

tailMap()方法类似于headMap()方法,不同之处在于tailMap()返回等于或者高于给定参数元素的所有元素。这是一个NavigableMap``tailMap()的例子:

NavigableMap navigableMap = new TreeMap();

navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

SortedMap tailMap = navigableMap.tailMap("c");

tailMap变量将引用一个SortedMap,其中包含来自NavigableMap的所有键+值对,这些键分别是" c"," d"和" e"键,因为这些键被认为等于或者大于而不是传递给tailMap()方法的参数值" c"。

subMap()

subMap()允许我们传递两个参数,以划定视图地图的边界以返回。这是一个NavigableMap``subMap()的例子:

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");
original.put("4", "4");
original.put("5", "5");

//this submap1 will contain "3", "3"
SortedMap    submap1  = original.subMap("2", "4");

//this submap2 will contain ("2", "2") ("3", "3") and ("4", "4") because
//    fromInclusive=true, and toInclusive=true
NavigableMap submap2 = original.subMap("2", true, "4", true);

ceilingKey()

ceilingKey()方法返回此映射中的最小(最小)键,该键大于或者等于作为参数传递给ceilingKey()方法的元素。这是一个NavigableMap``ceilingKey()示例:

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");

//ceilingKey will be "2".
Object ceilingKey = original.ceilingKey("2");

floorKey()

floorKey()方法与ceilingKey()相反。因此,floorKey()返回的最大密钥小于或者等于传递给ceilingKey()的参数值。这是一个NavigableMap``ceilingKey()示例:

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");

//floorKey will be "2".
Object floorKey = original.floorKey("2");

返回的floorKey将为" 2",因为在上例中,等于或者小于" 2"的最大密钥为"" 2"。

HigherKey()

" higherKey()"方法返回此映射中的最小(最小)元素,该元素大于(也不等于)作为参数传递给" higherKey()"方法的元素。这是一个NavigableMap``higherKey()的例子:

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");

//higherKey will be "3".
Object higherKey = original.higherKey("2");

lowerKey()

lowerKey()方法的作用与higherKey()方法的相反。因此," lowerKey()"返回的最大密钥低于传递给" lowerKey()"方法的参数值。这是一个NavigableMap``lowerKey()的例子:

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");

//lowerKey will be "1"
Object lowerKey = original.lowerKey("2");

在上面的示例中,返回的lowerKey将为" 1",因为这是最高的键,低于传递给lowerKey()方法的参数值" 2"

celingEntry(),floorEntry(),higherEntry(),lowerEntry()

" NavigableMap"还具有获取给定键而不是键本身的条目的方法。这些方法的行为类似于" ceilingKey()"等方法,不同之处在于它们返回" Map.Entry"而不是键对象本身。

Map.Entry将单个键映射到单个值。

以下各节将介绍方法" ceilingEntry()"," floorEntry()"," higherEntry()"和" lowerEntry()"。

ceilingEntry()

" ceilingEntry()"方法返回为" NavigableMap"中的最小(最小)键存储的键+值,该值大于或者等于传递给" ceilingEntry()"方法的参数值。因此," ceilingEntry()"与" ceilingKey()"方法相似,不同之处在于" ceilingKey()"方法仅返回键,而" ceilingKey()"返回包含键和键的" Map.Entry"对象。价值。

这是一个简单的NavigableMap``ceilingEntry()示例:

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

//ceilingEntry will be ("c", "3").
Map.Entry ceilingEntry = navigableMap.ceilingEntry("c");

在上面的示例中,返回的ceilingEntry将包含键" c"和值" 3",因为键" c"是大于或者等于参数值的最小键 " c"传递给ceilingEntry()

floorEntry()

floorEntry()方法与ceilingEntry()方法相反。 " floorEntry()"方法返回最大键的键+值,该值等于或者小于传递给" floorEntry()"方法的参数值。这是一个NavigableMap``floorEntry()示例:

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

//floorEntry will be ("c, "3").
Map.Entry floorEntry = navigableMap.floorEntry("c");

上例中返回的floorEntry将包含键+值对" c"+" 3",因为键" c"是小于或者等于参数值的最大键。 " c"传递给了" floorEntry()"方法。

HigherEntry()

" higherEntry()"方法返回存储的最小键值+大于传递给" higherEntry()"方法的参数值的键。这是一个NavigableMap``higherEntry()的例子:

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

//higherEntry will be ("d", "4").
Map.Entry higherEntry = original.higherEntry("c");

上例中返回的" higherEntry"将包含键+值对"" d"" +" 4",因为键" d"是最低的键,高于参数值" c"传递给higherEntry()方法。

lowerEntry()

NavigableMap接口中的lowerEntry()方法返回最高键的键+值对,该键+值对低于传递给lowerEntry()方法的参数值。这是一个NavigableMap``lowerEntry()的例子:

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

//lowerEntry will be ("a", "1")
Map.Entry lowerEntry = original.lowerEntry("b");

在此示例中返回的" lowerEntry"将是键+值对"" a"+" 1",因为" a"是最高的键,低于传递给参数值" b"的lowerEntry()方法。

pollFirstEntry()

" pollFirstEntry()"方法返回并删除" NavigableMap"中的"第一个"条目(键+值),如果地图为空,则返回null。 "第一"表示根据键的排序顺序的最小元素。这是一个pollFirstEntry()示例:

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

//first is ("a", "1")
Map.Entry first = original.pollFirstEntry();

在上面的示例中返回的"第一个"条目将是键+值对" a"+" 1",因为键" a"将被视为添加其中的键+值对的第一个键这个例子。

pollLastEntry()

pollLastEntry()返回并删除地图中的"最后一个"元素;如果地图为空,则返回null。 " Last"表示根据地图的元素排序顺序的最大键。这是一个pollLastEntry()示例:

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

//first is ("e", "5")
Map.Entry last = original.pollLastEntry();

上例中返回的last条目将是键+值对" e"+" 5",因为键" e"将被视为键+值对中添加的键这个例子。