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 对象负责集合元素的排序逻辑

  • 相关阅读:
    省选模拟17 题解
    省选模拟16 题解
    省选模拟15 题解
    省选模拟14 题解
    省选模拟13 题解
    省选模拟12 题解
    图论专项测试
    数学专题测试4
    省选模拟11 题解
    爬虫框架:scrapy
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7234396.html
Copyright © 2011-2022 走看看