Java中NavigableMap ceilingEntry()方法
Java中的NavigableMap是一种有序映射,它提供的ceilingEntry()方法可以查找并返回键大于等于给定键的最小键值对。本文将介绍ceilingEntry()方法的详细用法。
NavigableMap简介
NavigableMap是Java中的一种有序映射,它继承自SortedMap接口,并额外提供了一些方法,例如ceilingEntry()、floorEntry()、higherEntry()等,这些方法能够更好地支持对键的处理。
下面是NavigableMap接口的类继承关系和方法列表:
public interface NavigableMap<K,V> extends SortedMap<K,V> {
Map.Entry<K,V> lowerEntry(K key);
K lowerKey(K key);
Map.Entry<K,V> floorEntry(K key);
K floorKey(K key);
Map.Entry<K,V> ceilingEntry(K key);
K ceilingKey(K key);
Map.Entry<K,V> higherEntry(K key);
K higherKey(K key);
Map.Entry<K,V> firstEntry();
Map.Entry<K,V> lastEntry();
Map.Entry<K,V> pollFirstEntry();
Map.Entry<K,V> pollLastEntry();
NavigableMap<K,V> descendingMap();
NavigableSet<K> navigableKeySet();
NavigableSet<K> descendingKeySet();
NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive,K toKey, boolean toInclusive);
NavigableMap<K,V> headMap(K toKey, boolean inclusive);
NavigableMap<K,V> tailMap(K fromKey, boolean inclusive);
SortedMap<K,V> subMap(K fromKey, K toKey);
SortedMap<K,V> headMap(K toKey);
SortedMap<K,V> tailMap(K fromKey);
}
NavigableMap继承自SortedMap,因此SortedMap中的方法也可以在NavigableMap中使用。
ceilingEntry()方法详解
ceilingEntry()方法是NavigableMap接口中比较常用的方法之一,它会返回给定键大于等于的最小键值对。以下是ceilingEntry()方法的签名:
Map.Entry<K,V> ceilingEntry(K key);
其中,key是需要查找的键值。拿一个简短的例子来看,假设我们有一个NavigableMap对象,它存储的是球员的得分信息:
NavigableMap<Integer,String> scores = new TreeMap<>();
scores.put(60,"LeBron James");
scores.put(80,"Stephen Curry");
scores.put(90,"Kobe Bryant");
scores.put(95,"Michael Jordan");
我们可以使用ceilingEntry()方法查找大于等于85分的最小键值对:
Map.Entry<Integer,String> entry = scores.ceilingEntry(85);
System.out.println(entry.getKey() + ":" +entry.getValue());
输出如下:
90:Kobe Bryant
在这个例子中,ceilingEntry(85)返回了大于等于85分的最小键值对,也就是“90:Kobe Bryant”。
需要注意的是,在NavigableMap实现类中,如TreeMap、ConcurrentSkipListMap等,ceilingEntry()方法中的键必须和map中存储的键是同一类型,并且必须实现了Comparable接口或者传入了Comparator对象。
完整示例
为了更加直观地展示ceilingEntry()方法的使用,下面是一个完整的示例代码,其中,我们创建了一个名为PlayerScores的类来代表球员得分:
import java.util.NavigableMap;
import java.util.Map;
import java.util.TreeMap;
public class PlayerScores {
private NavigableMap<Integer,String> scores;
public PlayerScores(){
scores = new TreeMap<>();
}
public void addPlayerScore(Integer score,String player){
scores.put(score,player);
}
public void printScoresGreaterThan(Integer score){
Map.Entry<Integer,String> entry = scores.ceilingEntry(score);
while (entry != null){
System.out.println(entry.getValue() + ":" + entry.getKey());
entry = scores.higherEntry(entry.getKey());
}
}
public staticvoid main(String[] args){
PlayerScores ps = new PlayerScores();
ps.addPlayerScore(60,"LeBron James");
ps.addPlayerScore(80,"Stephen Curry");
ps.addPlayerScore(90,"Kobe Bryant");
ps.addPlayerScore(95,"Michael Jordan");
ps.printScoresGreaterThan(85);
}
}
在上述示例中,PlayerScores类内部封装了一个NavigableMap对象scores,并提供了一个addPlayerScore()方法来添加得分信息。同时,它还提供了一个printScoresGreaterThan()方法,来打印大于等于给定分数的球员得分信息。
在main()方法中,我们创建了一个PlayerScores对象ps,添加了四名球员的得分信息,并调用了printScoresGreaterThan(85)方法来打印大于等于85分的球员得分信息。
运行上述代码,输出如下:
Kobe Bryant:90
Michael Jordan:95
结论
本文详细介绍了Java中NavigableMap的ceilingEntry()方法的使用,通过这个方法我们可以方便地查找大于等于给定键的最小键值对。在使用该方法时,需要注意传入的键必须和存储在map中的键类型相同,且键必须实现了Comparable接口或者传入了Comparator对象。