java集合框架总结(五)

1、Set接口 概述

 Set 接口继承 Collection 接口,并且它不容许集合中存在重复项,每一个具体的 Set 实现类
依赖添加的对象的 equals()方法来检查独一性。Set接口没有引入新方法,因此Set就是一
个Collection,只不过其行为不一样。  而后来讲Set接口的3种实现.java

二:HashSet概述

  • HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。
  • HashSet 按 Hash 算法来存储集合中的元素,所以具备很好的存取和查找性能。
  • HashSet 具备如下特色:不能保证元素的排列顺序,HashSet 不是线程安全的,集合元素可使 null
  • HashSet的对象必须实现hashCode方法,javaAPI大多数类实现了hashCode方法。
  • 当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来获得该对象的 hashCode 值,而后根据 hashCode 值决定该对象在 HashSet 中的存储位置。
  • 若是两个元素的 equals() 方法返回 true,但它们的 hashCode() 返回值不相等,hashSet 将会把它们存储在不一样的位置,但依然能够添加成功。
  • HashSet 集合判断两个元素相等的标准:两个对象经过 equals() 方法比较相等,而且两个对象的 hashCode() 方法返回值也相等。若是两个对象经过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同.
  • 重写 hashCode() 方法的基本原则:
    -在程序运行时,同一个对象屡次调用 hashCode() 方法应该返回相同的值
    -当两个对象的 equals() 方法比较返回 true 时,这两个对象的 hashCode() 方法的返回值也应相等
    -对象中用做 equals() 方法比较的 Field,都应该用来计算 hashCode 值

三:LinkedHashSet

  • LinkedHashSet 是 HashSet 的子类,支持规则集内元素的排序,在HashSet中元素是没有顺序的,而在LinkedHashSet中,能够按元素插入集合的顺序进行提取
  • LinkedHashSet 集合根据元素的 hashCode 值来决定元素的存储位置,但它同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的。
  • LinkedHashSet 性能插入性能略低于 HashSet,但在迭代访问 Set 里的所有元素时有很好的性能。
  • LinkedHashSet 不容许集合元素重复。

 

四:TreeSet

  • TreeSet 是 SortedSet 接口的实现类,TreeSet 能够确保集合元素处于排序状态。
  • TreeSet 支持两种排序方法:天然排序和定制排序。默认状况下,TreeSet 采用天然排序。
    • 天然排序:由于只有相同类的两个实例才会比较大小,因此向 TreeSet 中添加的应该是同一个类的对象当须要把一个对象放入 TreeSet 中,重写该对象对应的 equals() 方法时,应保证该方法与 compareTo(Object obj) 方法有一致的结果:若是两个对象经过 equals() 方法比较返回 true,则经过 compareTo(Object obj) 方法比较应返回 0
      • 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 集合对象时,提供一个 Comparator 接口的实现类对象。由该 Comparator 对象负责集合元素的排序逻辑
       
  • TreeSet保证集中的元素是有序的,有2种方法能够实现对象之间的可比较性:1,添加到TreeSet的对象实现了Comparable接口;2,给规则集的元素指定一个比较器(Comparator),主要方法:
    • Comparator comparator() Object first() Object last() Object lower(Object e) Object higher(Object e) SortedSet subSet(fromElement, toElement) SortedSet headSet(toElement) SortedSet tailSet(fromElement)
相关文章
相关标签/搜索