zoukankan      html  css  js  c++  java
  • Java集合----Set集合

    Set集合


    Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。
    Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法

    HashSet


    HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。

    HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能


    HashSet 具有以下特点:
      不能保证元素的排列顺序
      HashSet 不是线程安全的
      集合元素可以使 null
    当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值决定该对象在 HashSet 中的存储位置。


    如果两个元素的 equals() 方法返回 true,但它们的 hashCode() 返回值不相等,hashSet 将会把它们存储在不同的位置,但依然可以添加成功。


    hashCode() 方法

    HashSet 集合判断两个元素相等的标准:两个对象通过 equals() 方法比较相等,并且两个对象的 hashCode() 方法返回值也相等。


    如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同


    重写 hashCode() 方法的基本原则

      在程序运行时,同一个对象多次调用 hashCode() 方法应该返回相同的值
      当两个对象的 equals() 方法比较返回 true 时,这两个对象的 hashCode() 方法的返回值也应相等
      对象中用作 equals() 方法比较的 Field,都应该用来计算 hashCode 值

    LinkedHashSet


    LinkedHashSet 是 HashSet 的子类

    LinkedHashSet 集合根据元素的 hashCode 值来决定元素的存储位置,但它同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的。

    LinkedHashSet 性能插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能。

    LinkedHashSet 不允许集合元素重复


    TreeSet


    TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态
      Comparator comparator()
      Object first()
      Object last()
      Object lower(Object e)
      Object higher(Object e)
      SortedSet subSet(fromElement, toElement)
      SortedSet headSet(toElement)
      SortedSet tailSet(fromElement)


    TreeSet 支持两种排序方法:自然排序和定制排序。默认情况下,TreeSet 采用自然排序


    自然排序

    排序:TreeSet 会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系,然后将集合元素按升序排列


    如果试图把一个对象添加到 TreeSet 时,则该对象的类必须实现 Comparable 接口


    实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。


    Comparable 的典型实现:


      BigDecimal、BigInteger 以及所有的数值型对应的包装类:按它们对应的数值大小进行比较
      Character:按字符的 UNICODE 值来进行比较
      Boolean:true 对应的包装类实例大于 false 对应的包装类实例
      String:按字符串中字符的 UNICODE 值进行比较
      Date、Time:后边的时间、日期比前面的时间、日期大


    因为只有相同类的两个实例才会比较大小,所以向 TreeSet 中添加的应该是同一个类的对象

    当需要把一个对象放入 TreeSet 中,重写该对象对应的 equals() 方法时,应保证该方法与 compareTo(Object obj) 方法有一致的结果:如果两个对象通过 equals() 方法比较返回 true,则通过 compareTo(Object obj) 方法比较应返回 0

    定制排序

    如果需要实现定制排序,则需要在创建 TreeSet 集合对象时,提供一个 Comparator 接口的实现类对象。由该 Comparator 对象负责集合元素的排序逻辑

  • 相关阅读:
    This counter can increment, decrement or skip ahead by an arbitrary amount
    LUT4/MUXF5/MUXF6 logic : Multiplexer 8:1
    synthesisable VHDL for a fixed ratio frequency divider
    Bucket Brigade FIFO SRL16E ( VHDL )
    srl16e fifo verilog
    DualPort Block RAM with Two Write Ports and Bytewide Write Enable in ReadFirst Mode
    Parametrilayze based on SRL16 shift register FIFO
    stm32 spi sdcard fatfs
    SPI bus master for System09 (2)
    SQLSERVER中的自旋锁
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7234396.html
Copyright © 2011-2022 走看看