关于TreeMap

2024-06-13 08:04
文章标签 treemap

本文主要是介绍关于TreeMap,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是 TreeMap

TreeMap 是 Java 集合框架中的一个类,它实现了 NavigableMap 接口,并且基于红黑树的实现。它存储的键值对是有序的,默认情况下按键的自然顺序(如数字的从小到大,字符串的字母顺序)排序。

TreeMap 的特点

  1. 排序

    • TreeMap 是按键的自然顺序排序的。如果你希望按其他方式排序,可以提供一个 Comparator 来定制排序顺序。
  2. 时间复杂度

    • 插入、删除和查找操作的时间复杂度为 O(log n),因为底层使用红黑树结构。
  3. 键的唯一性

    • TreeMap 中的键是唯一的,即一个键只能对应一个值。
  4. 线程安全性

    • TreeMap 不是线程安全的。如果需要在多线程环境下使用,建议使用 Collections.synchronizedSortedMap 方法来包装 TreeMap

TreeMap 的主要方法

以下是 TreeMap 中一些常用的方法:

  • 构造方法

    TreeMap<K, V> treeMap = new TreeMap<>();
    TreeMap<K, V> treeMap = new TreeMap<>(Comparator<? super K> comparator);
    
  • 插入元素

    V put(K key, V value);
    
  • 获取元素

    V get(Object key);
    
  • 删除元素

    V remove(Object key);
    
  • 检查键是否存在

    boolean containsKey(Object key);
    
  • 检查值是否存在

    boolean containsValue(Object value);
    
  • 获取第一个和最后一个键

    K firstKey();
    K lastKey();
    
  • 获取子集视图

    SortedMap<K, V> subMap(K fromKey, K toKey);
    SortedMap<K, V> headMap(K toKey);
    SortedMap<K, V> tailMap(K fromKey);
    
  • 获取键值对的集合视图

    Set<Map.Entry<K, V>> entrySet();
    

示例代码

下面是一些使用 TreeMap 的简单示例代码:

import java.util.*;public class TreeMapExample {public static void main(String[] args) {// 创建 TreeMap 实例TreeMap<String, Integer> treeMap = new TreeMap<>();// 插入元素treeMap.put("apple", 10);treeMap.put("banana", 20);treeMap.put("cherry", 15);// 获取元素int value = treeMap.get("banana");System.out.println("Value for banana: " + value);// 删除元素treeMap.remove("cherry");// 遍历元素for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}// 获取第一个和最后一个键System.out.println("First key: " + treeMap.firstKey());System.out.println("Last key: " + treeMap.lastKey());// 获取子集视图SortedMap<String, Integer> subMap = treeMap.subMap("apple", "banana");for (Map.Entry<String, Integer> entry : subMap.entrySet()) {System.out.println("SubMap - " + entry.getKey() + ": " + entry.getValue());}}
}

TreeMap 的高级用法

  • 自定义排序

    TreeMap<String, Integer> treeMap = new TreeMap<>(Comparator.reverseOrder());
    treeMap.put("apple", 10);
    treeMap.put("banana", 20);
    treeMap.put("cherry", 15);
    
  • 获取键的范围视图

    NavigableMap<String, Integer> descendingMap = treeMap.descendingMap();
    
  • 获取近似匹配

    Map.Entry<String, Integer> floorEntry = treeMap.floorEntry("banana");
    Map.Entry<String, Integer> ceilingEntry = treeMap.ceilingEntry("banana");
    

总结

TreeMap 是一个强大的集合类,提供了按键排序存储数据的能力。它适用于需要按自然顺序或自定义顺序访问键值对的场景。理解和熟练使用 TreeMap 可以大大提高处理有序数据的效率。

这篇关于关于TreeMap的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056731

相关文章

Java重修笔记 第四十八天 TreeSet 类、TreeMap 类

TreeSet 类 1. TreeSet 底层是 TreeMap 2. 使用默认构造器创建的 TreeSet 对象,添加顺序和取出顺序不是有序的 3. 如果添加的是字符串或数字,它们默认会按照字母顺序或数值顺序进行排序 4. 可以在构造器中传入一个 Comparator 比较器来手动制定比较规则,之后传入的数据会根据改规则自动进行比较排序,如果根据比较器比较出的结果是相同的,即 com

Java集合框架(Set与Map,HashSet与HashMap,TreeSet与TreeMap)

这是一个介绍集合类,数组以及容器关系的截图,便于我们对集合的理解。 一.Set和Map Set代表一种集合元素无序、不可重复的集合,Map则代表一种由多个key-value(键-值)对组成的集合。 从表面上看,它们之间的相似性很少,但实际上Map和Set之间有莫大的联系。可以说,Map集合是Set集合的扩展。 如果只考察Map集合的Key,不难发现,这些Map集合的key具有一个特

吃透Java集合系列十二:TreeMap

一:TreeMap整体认识 我们知道HashMap,它保证了以O(1)的时间复杂度进行增、删、改、查,从存储角度考虑,这两种数据结构是非常优秀的。但是HashMap还是有自己的局限性----它不具备统计性能,或者说它的统计性能时间复杂度并不是很好才更准确,所有的统计必须遍历所有Entry,因此时间复杂度为O(N)。 比如Map的Key有1、2、3、4、5、6、7,我现在要统计: 所有Key比3

LinkedHashMap和TreeMap的基本使用

一.LinkedHashMap集合:(是HashMap集合的儿子,Map集合的孙子) 1.特点: 2.代码实现: 1)键的唯一性: package com.itheima.a01myMap;​import java.util.LinkedHashMap;​public class A07_LinkedHashMapDemo3 {public static void main

32-hashmap linkedmap treemap 的区别

‌HashMap‌、‌LinkedHashMap‌和‌TreeMap‌是Java中三种常用的Map实现,它们在数据结构、有序性、性能和线程安全性等方面有所不同。   ‌数据结构‌: ‌HashMap‌:基于哈希表数据结构实现,通过计算键的哈希值来确定存储位置。它不保证元素的顺序,即元素的遍历顺序可能不同于插入顺序。HashMap的插入、查找和删除操作平均时间复杂度为O(1)。‌LinkedHas

TreeMap源码剖析:自定义排序规则的红黑树map数据结构

文章目录 概述基本结构构造函数自定义排序实现维护红黑树性质小结 概述 Java中的TreeMap类实现了自定义排序规则的红黑树(Red-Black Tree)Map数据结构,它保证了键值对按照键的自然顺序或提供的比较器(Comparator)进行排序。TreeMap实现了NavigableMap接口的有序映射,它使用红黑树数据结构存储键值对。红黑树是一种自平衡的二叉查找树,它通过

使用 java.util.TreeMap 类 tailMap headMap fisrtKey lastKey

TreeMap 类不仅实现了 Map 接口,还实现了 Map 接口的子接口 java.util.SortedMap。  TreeMap 类中不允许键对象为 null 或是 基本数据类型,这是因为 TreeMap 中的对象必须是可排序的(即对象需要实现 java.lang.Comparable 接口)  TreeMap 类通过实现 SortedMap 接口得到的方法如表1所示:  方法名称返

HashMap,LinkedMap,TreeMap的区别

HashMap,LinkedHashMap,TreeMap都属于Map Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。   HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashM

双列集合 HashMap以及TreeMap底层原理

双列集合   特点:         双列集合一次需要存一对数据,分别为键和值         键不能重复,值可以重复         键和值是一一对应的,每个键只能找到自己对应的值         键和值这个整体在Java中叫做“Entry对象” Map的常见API         Map是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的

什么是哈希冲突?如何解决哈希冲突?HashMap和TreeMap之间的区别?

Map 和 Set 的概念 Map和Set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关 。 为什么说它是一种专门用来进行搜索的数据结构呢? 我们应该都用过“遍历查找”、“二分查找”,这两种方式也都是用来对目标值进行搜索的,但是,这两种方式有些缺陷: 遍历查找需要一个一个的遍历,时间复杂度达到了O(N),比较消耗时间。 二分查找的时间复杂度是log(N),