第1关:学习-Java集合类之Map的TreeMap之特有方法的使用
任务描述
本关任务:使用 TreeMap 集合操作城市名以及城市编码。
相关知识
什么是 TreeMap
TreeMap 是 Map 接口的实现类,它存储的元素是键值对(key-value)映射,其中 key 值不允许为 null,在添加、删除元素上,TreeMap 要比 HashMap 性能差。另外,它既是无序的,又是有序的。无序指的是存储元素顺序和输出顺序不同,有序指的是 TreeMap 会默认对元素的键进行自然排序(具体排序规则可参考 这个实训中 TreeSet 的排序规则)。
创建 TreeMap 集合
使用以下代码即可创建一个 TreeMap 集合。
public static void main(String[] args) {
// 创建 TreeMap 集合,key存储字符串类型,value存储整数类型
Map<String, Integer> map = new TreeMap<>();
}
TreeMap 集合常见方法
TreeMap 集合增删改查相关的方法和 HashMap 集合是一样的,另外,它还有以下特有方法:
方法名 | 方法说明 |
ceilingEntry(key)方法 | 返回集合中大于或等于且最接近给定 key 值的元素,如果不存在这样的键值对,则返回 null |
ceilingKey(key) | 返回集合中大于或等于且最接近给定 key 值的键值 |
descendingKeySet() | 逆序返回集合的全部 Key |
firstEntry() | 返回集合中最小 Key 的元素 |
floorEntry(key) | 返回集合中小于或等于且最接近给定 key 值的元素,如果不存在这样的键值对,则返回 null |
headMap(key) | 返回所有小于给定 key 的元素 |
higherEntry(key) | 返回所有大于给定 key 的元素 |
lastEntry() | 返回 key 最大的元素 |
pollFirstEntry() | 删除集合中最小 Key 的元素 |
TreeMap 集合特有方法使用实例:
public static void main(String[] args) {
// 创建 TreeMap 集合,key 存储字符串类型,value 存储整数类型
Map<Integer, Integer> map = new TreeMap<>();
// 添加元素
map.put(100,28);
map.put(2,26);
map.put(22,26);
System.out.println(map);
// 输出集合中大于或等于且最接近键为 3 的元素
Map.Entry<Integer, Integer> integerIntegerEntry = ((TreeMap<Integer, Integer>) map).ceilingEntry(3);
System.out.println(integerIntegerEntry);
// 逆序输出集合的全部 Key
NavigableSet<Integer> integers = ((TreeMap<Integer, Integer>) map).descendingKeySet();
System.out.println(integers);
// 输出集合中键最小的元素
Map.Entry<Integer, Integer> integerIntegerEntry1 = ((TreeMap<Integer, Integer>) map).firstEntry();
System.out.print(integerIntegerEntry1);
}
执行结果:
{2=26, 22=26, 100=28}
22=26
[100, 22, 2]
2=26
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,使用 TreeMap 集合特有方法实现所给要求,具体如下:
- 接收给定的一行字符串(如:743:湖南,744:湖北,...,其中数字代表城市编码,数字后是城市名);
- 切割字符串,把切割后的元素添加进 TreeMap 集合;
- 逆序输出所有城市编码;
- 输出城市编码最大和最小的元素(如城市编码最大的元素:744=湖北。城市编码最小的元素:321=北京);
- 删除城市编码最小的元素(如:删除的元素是:321=北京);
- 打印集合。
注意:字符串中冒号和逗号都是中文符号。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例:
测试输入:
743:湖南,744:湖北,321:北京
预期输出:
[744, 743, 321]
城市编码最大的元素:744=湖北。城市编码最小的元素:321=北京
删除的元素是:321=北京
{743=湖南, 744=湖北}
开始你的任务吧,祝你成功!
注释:发表本篇文章的本意是记录TreeMap的使用方法,同时也是为了以后查询方便,在网上搜查过后,并未发现此文章,便将答案也贴出来。
import java.util.*;
public class CollTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
Scanner sc = new Scanner(System.in);
// 第一步:接收给定字符串
String str = sc.next();
// 第二步:创建HashMap集合,key为城市编码,value为城市名
Map<String, String> map = new TreeMap<>();
// 第三步:切割字符串
String[] s = str.split(",|:");
// 第四步:把元素添加到集合中
for ( int i = 0; i < s.length; i += 2 ) {
map.put(s[i], s[i+1]);
}
// 第五步:逆序输出所有城市编码
NavigableSet<String> string = ((TreeMap<String, String>)map).descendingKeySet();
System.out.println(string);
// 第六步:输出城市编码最大和最小的元素
Map.Entry<String, String> stringEntryMin = ((TreeMap<String, String>)map).firstEntry();
Map.Entry<String, String> stringEntryMax = ((TreeMap<String, String>)map).lastEntry();
System.out.println("城市编码最大的元素:" + stringEntryMax + "。城市编码最小的元素:" + stringEntryMin);
// 第七步:删除城市编码最小的元素
System.out.println("删除的元素是:" + stringEntryMin);
((TreeMap<String, String>)map).pollFirstEntry();
System.out.println(map.toString());
/********** End **********/
}
}