• Hashset和Treeset的区别


    Set中元素不可以重复,是无序的(这里的无序是指存入元素的先后顺序与输出元素的先后顺序不一致)

    HashSet:

      ①内部的数据结构是哈希表,是线程不安全的。

      HashSet中保证集合中元素是唯一的方法:通过对象的hashCode和equals方法来完成对象唯一性的判断。如果对象的hashCode值不同则不用判断equals方法,就直接存到HashSet中

      注意:如果元素要存到HashSet中,必须覆盖hashCode方法和equals方法。

      ③HashSet是哈希表实现的,HashSet中的元素是无序的。集合元素可以是null,但只能放入一个null。

      HashSet要求放入的对象必须实现HashCode()方法,放入的对象是以hashcode码作为标识的,而具有相同内容的String对象,HashCode是一样的,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例。

    TreeSet:

      TreeSet是SortedSet接口的唯一实现类,TreeSet可以保证集合元素处于排序状态。TreeSet支持两种排序方式,自然排序和定制排序,其中自然排序是默认的排序方式,想TreeSet中加入的对象应该是同一个类的对象。

      ①可以对Set集合中的元素进行排序,是线程不安全的。

      ②TreeSet判断元素唯一性的方法是:根据比较方法的返回结果是否为0,如果是0,则是相同元素,如果不是0,是不同元素,存储。

      ③TreeSet对元素进行排序的方式:元素自身具备比较的功能,即自然排序,需要实现Comparable接口,并覆盖其compareTo方法。元素本身不具备比较功能的,则需要实现Comparator,并覆盖其compare方法(定制排序)。

      ④TreeSet是二叉树实现的,TreeSet中的数据是自动排好顺序的,不允许放入null值

    总结:HashSet存放对象的时候判断对象是否相等,是根据对象的hashCode和equals方法。TreeSet存放对象时,是根据对象的compareTo方法比较两个对象是否相等,并进行比较。

    Hashset和Treeset的使用场景

    HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定的顺序来存放。

    TreeSet:提供一个使用树结构存储set接口的实现(红黑树算法)。对象以升序顺序存储,访问和遍历的时间很快。 

    使用场景:HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。我们通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet。

  • 相关阅读:
    Java实现 LeetCode 371 两整数之和
    Java实现 LeetCode 371 两整数之和
    Java实现 LeetCode 371 两整数之和
    Java实现 LeetCode 1013 将数组分成和相等的三个部分
    Java实现 LeetCode 1013 将数组分成和相等的三个部分
    Java实现 LeetCode 1013 将数组分成和相等的三个部分
    Java实现蓝桥杯VIP算法训练 纪念品分组
    Java实现蓝桥杯VIP算法训练 纪念品分组
    linux下syscall函数,SYS_gettid,SYS_tgkill
    可变参数宏__VA_ARGS__和...
  • 原文地址:https://www.cnblogs.com/chenglijuan1611/p/12039991.html
Copyright © 2020-2023  润新知