Java集合-NavigableMap

NavigableMapjava.util.NavigableMap)接口是
SortedMap的子接口,但是 NavigableMap接口中新加了几个SortedSet接口中没有的方法,使导航存储在映射中的键和值成为可能,本文会讲解。

NavigableMap的实现

既然是接口,那就必须用到它的实现,java.util包中只有一个实现 java.util.TreeMap ,另外java.util.concurrent包中也有实现,但是本文不讲解。

创建NavigableMap

为了创建NavigableMap ,则必须使用它实现的实例,下面是代码:

 
NavigableMap navigableMap = new TreeMap();

使用Comparator创建NavigableMap

可以使用Comparator得实现作为TreeMap构造函数得参数, 然后,这个Comparator 将用于对存储在NavigableMap中的键、值对的键进行排序:

Comparator comparator = new MyComparatorImpl();

SortedMap sortedMap = new TreeMap(comparator);

 

descendingKeySet()

返回一个所有key键的视图,顺序是倒序:

NavigableSet reverse = map.descendingKeySet();

descendingMap()

返回一个与原map反向顺序的视图,仍然是同一个map,操作会互相影响:

NavigableMap descending = map.descendingMap();

headMap()

返回小于第一个参数的键值对的视图(如果第二个参数为true代表包含等于):

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()方法很小,除了返回的大于等会给定key的视图:

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的值是包含了key为"c""d"  "e"的键值对的SortedMap,因为这些key的值大于等于"c"。

subMap()

 返回fromKeytoKeymap视图,通过fromInclusivetoInclusive控制是否包含:

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()

返回最接近的大于等于key的键:

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()方法相对应,返回小于且最接近key的键(包含等于)

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,因为对应的key"2"小于或者等于 "2"

higherKey()

返回最接近的大于key的键:

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()

返回小于且最接近key的键(不包含等于)

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",因为这是key小于"2"对应的最大值。

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

NavigableMap还提供了一些方法来获取给定键的entry,而不是键本身,这些方法和ceilingKey()方法很小,只不过返回的是 Map.Entry而不是key对象本身,Map.Entry映射的是单个keyvalue

ceilingEntry()

找到第一个大于或等于指定keyMap.Entry

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的值包含 key "c" value "3",因为 "c"是大于或者等于 "c"的最小值。

floorEntry()

floorEntry()方法和ceilingEntry()方法相对,找到第一个小于或等于指定key的Map.Entry

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"的最大值

higherEntry()

higherEntry()找到第一个大于指定key的值

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"的最小值。

lowerEntry()

lowerEntry()方法找到第一个比指定的key小的值

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"的最大值。

pollFirstEntry()

pollFirstEntry()移除第一个entry (key + value)并返回,如果NavigableMap是空的话返回null

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();

 

First的值是  "a" + "1" ,因为 "a" 是第一个key

pollLastEntry()

pollLastEntry()返回map中的最后一个元素,如果map是空的话返回null:

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" map中的最后一个元素。

参考:https://blog.csdn.net/cgsyck/article/details/108462189

           http://tutorials.jenkov.com/java-collections/navigablemap.html

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值