学习-Java集合类之Map的TreeMap之特有方法的使用

第1关:学习-Java集合类之Map的TreeMap之特有方法的使用

任务描述

本关任务:使用 TreeMap 集合操作城市名以及城市编码。

相关知识

什么是 TreeMap

TreeMap 是 Map 接口的实现类,它存储的元素是键值对(key-value)映射,其中 key 值不允许为 null,在添加、删除元素上,TreeMap 要比 HashMap 性能差。另外,它既是无序的,又是有序的。无序指的是存储元素顺序和输出顺序不同,有序指的是 TreeMap 会默认对元素的键进行自然排序(具体排序规则可参考 这个实训中 TreeSet 的排序规则)。

创建 TreeMap 集合

使用以下代码即可创建一个 TreeMap 集合。

 
  
  1. public static void main(String[] args) {
  2. // 创建 TreeMap 集合,key存储字符串类型,value存储整数类型
  3. Map map = new TreeMap<>();
  4. }

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 集合特有方法使用实例:

 
  
  1. public static void main(String[] args) {
  2. // 创建 TreeMap 集合,key 存储字符串类型,value 存储整数类型
  3. Map map = new TreeMap<>();
  4. // 添加元素
  5. map.put(100,28);
  6. map.put(2,26);
  7. map.put(22,26);
  8. System.out.println(map);
  9. // 输出集合中大于或等于且最接近键为 3 的元素
  10. Map.Entry integerIntegerEntry = ((TreeMap) map).ceilingEntry(3);
  11. System.out.println(integerIntegerEntry);
  12. // 逆序输出集合的全部 Key
  13. NavigableSet integers = ((TreeMap) map).descendingKeySet();
  14. System.out.println(integers);
  15. // 输出集合中键最小的元素
  16. Map.Entry integerIntegerEntry1 = ((TreeMap) map).firstEntry();
  17. System.out.print(integerIntegerEntry1);
  18. }

执行结果:

 
  
  1. {2=26, 22=26, 100=28}
  2. 22=26
  3. [100, 22, 2]
  4. 2=26

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,使用 TreeMap 集合特有方法实现所给要求,具体如下:

  • 接收给定的一行字符串(如:743:湖南,744:湖北,...,其中数字代表城市编码,数字后是城市名);
  • 切割字符串,把切割后的元素添加进 TreeMap 集合;
  • 逆序输出所有城市编码;
  • 输出城市编码最大和最小的元素(如城市编码最大的元素:744=湖北。城市编码最小的元素:321=北京);
  • 删除城市编码最小的元素(如:删除的元素是:321=北京);
  • 打印集合。

注意:字符串中冒号和逗号都是中文符号。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

例:
测试输入:

 
  
  1. 743:湖南,744:湖北,321:北京

预期输出:

 
  
  1. [744, 743, 321]
  2. 城市编码最大的元素:744=湖北。城市编码最小的元素:321=北京
  3. 删除的元素是:321=北京
  4. {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 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 = ((TreeMap)map).descendingKeySet();
        System.out.println(string);
        // 第六步:输出城市编码最大和最小的元素
        Map.Entry stringEntryMin = ((TreeMap)map).firstEntry();
        Map.Entry stringEntryMax = ((TreeMap)map).lastEntry();
		System.out.println("城市编码最大的元素:" + stringEntryMax + "。城市编码最小的元素:" + stringEntryMin);
        // 第七步:删除城市编码最小的元素
        System.out.println("删除的元素是:" + stringEntryMin);
        ((TreeMap)map).pollFirstEntry();
        System.out.println(map.toString());
        /********** End **********/
    }
}

你可能感兴趣的:(java学习,java,学习,散列表)