首页 > 其他分享 >三,TreeMap和HashMap,TreeSet和HashMap的区别以及方法使用上的不同

三,TreeMap和HashMap,TreeSet和HashMap的区别以及方法使用上的不同

时间:2024-10-20 21:45:48浏览次数:1  
标签:HashMap HashSet 复杂度 TreeMap null TreeSet

TreeMap 和 HashMap的区别

TreeMap:

基于红黑树实现。
提供了范围查询和排序功能。
所有操作的时间复杂度为 O(log n)。
不允许键为 null。
键必须实现 Comparable 接口或提供一个 Comparator。

HashMap:

基于哈希表实现。
提供快速的查找、插入和删除操作。
平均时间复杂度为 O(1),最坏情况下为 O(n)。
允许一定数量的哈希冲突。
键可以为 null。

TreeSet 和 HashSet

TreeSet:

基于红黑树实现。
元素按照自然顺序或者自定义的 Comparator 进行排序。
提供了范围查询功能。
所有操作的时间复杂度为 O(log n)。
不允许元素为 null。

HashSet:

基于哈希表实现。
提供快速的查找、插入和删除操作。
平均时间复杂度为 O(1),最坏情况下为 O(n)。
允许一定数量的哈希冲突。
元素可以为 null。

使用场景

当需要有序的集合时,选择 TreeMap 或 TreeSet。
当对性能要求较高,且不关心元素的顺序时,选择 HashMap 或 HashSet。
如果需要频繁的查找操作,HashMap 和 HashSet 更优。
如果需要维护键值对的映射关系,并且需要排序,选择 TreeMap。
如果需要维护一组元素,并且需要排序,选择 TreeSet。

方法使用上的不同

TreeMap 和 HashMap 都有 put, get, remove 等方法,但 TreeMap 还提供了 lowerKey, higherKey 等方法来进行范围查询。
TreeSet 和 HashSet 都有 add, remove, contains 等方法,但 TreeSet 还提供了 first, last 等方法来获取集合中的第一个和最后一个元素。

标签:HashMap,HashSet,复杂度,TreeMap,null,TreeSet
From: https://www.cnblogs.com/bjynjj/p/18487983

相关文章

  • tonkeeper的toogo库的Hashmap序列化有bug
    packagetonapiserviceimport( "fmt" "testing" "github.com/tonkeeper/tongo/boc" "github.com/tonkeeper/tongo/tlb")funcTestHashmapE(t*testing.T){ //Hashmap的序列化有bug,数据一样的情况下,有时候会提示notenouthbits. c:=......
  • HashMap优点总结及源码分析
    HashMap优点总结:可存储不同类型的数据:使用泛型来定义键和值的类型,兼容所有数据类型高效的查找和插入操作:通过key的hash映射,实现快速的查找和插入操作。时间复杂度基本为O(1)灵活的容量调整:可根据数据量增长自行动态扩容。当容量过大时,HashMap会自动进行缩容,从而提高空间利......
  • 大厂面试真题-说说jdk1.7和1.8的hashmap的区别以及各自的问题
    JDK1.7和JDK1.8中的HashMap存在显著的区别,并且各自存在一些问题。以下是对两者的详细对比及问题分析:一、区别底层数据结构:JDK1.7:HashMap的底层结构是由数组(也被称为“位桶”)和链表构成。当hash冲突时,不同的key映射到数组的同一位置,则形成链表。JDK1.8:HashMap的底层结构......
  • java_day14_HashSet、TreeSet、增强for循环、Map、HashMap、TreeMap、可变参数
    一、HashSetSet:HashSet:底层数据结构是哈希表,查找速度快,且元素唯一HashSet中的add方法实际上调用的是HashMap中的put方法底层和元素的hashCode方法值有关我们发现,底层判断待插入的元素是否已经存在哈希表中的方式是:将待插入的元素的哈希值与已经存......
  • Map集合中的具体子类TreeMap
    一、TreeMap元素是一个键值对,可以去重并进行排序1.先编写一个Dog2类publicclassDog2{privateStringname;privateintage;publicDog2(){}publicDog2(Stringname,intage){this.name=name;......
  • Java算法竞赛之HashMap常用API--哈西表!
    在Java算法竞赛中,HashMap是一个非常重要的数据结构,它提供了许多有用的API来方便地进行键值对的存储、检索和更新。除了getOrDefault方法外,HashMap还有其他一些常用的API。以下是一些主要的HashMapAPI及其在算法竞赛中的常见用法:put(Kkey,Vvalue)作用:将指定的键与值放入H......
  • Map中的具体实现子类HashMap
    一、HashMapHashMap<Student3,String>Map的唯一性指的是键的唯一性,HashMap中需要键的类型要重写hashCode()方法和equals方法二、HashMap的使用1.编写Student3类,里面需要重写hashCode()方法和equals方法importjava.util.Objects;publicclassStudent3{privateStrin......
  • Set集合的直接子类TreeSet
    一、TreeSet:底层数据结构是红黑树(自平衡二叉树),具备了可预测的排序1.自然排序通过实现comparable接口,重写里面的compareTo方法来进行排序1.编写一个Dog类,实现了Comparable接口,并重写里面的方法publicclassDogimplementsComparable<Dog>{privateStringname;pri......
  • Java中的Iterator接口,以及HashSet和TreeSet
    在Java编程中,`Iterator`接口是一个非常重要的概念,它为我们提供了一种统一且方便的方式来遍历集合(如`List`、`Set`、`Map`等数据结构中的元素,不过遍历`Map`时稍显特殊,通常是遍历其键值对的集合视图)。##一、Iterator接口的定义与方法`Iterator`接口位于`java.util`包中,它定义......
  • java中HashMap扩容机制详解(扩容的背景、触发条件、扩容的过程、扩容前后的对比、性能
    在Java中,HashMap是一个非常常用的数据结构,基于哈希表实现,它通过键值对的形式存储数据。为了保证其操作的效率,HashMap采用了一种动态扩容机制。当HashMap中元素数量增长到一定程度时,会自动进行扩容。本文将详细讲解HashMap的扩容机制,包括其触发条件、过程、及扩容过程中可能......