java集合框架总结(五)
来源:互联网 发布:java 国家精品课程 编辑:程序博客网 时间:2024/05/17 09:46
一、Set接口 概述
Set 接口继承 Collection 接口,而且它不允许集合中存在重复项,每个具体的 Set 实现类
依赖添加的对象的 equals()方法来检查独一性。Set接口没有引入新方法,所以Set就是一
个Collection,只不过其行为不同。 然后来说Set接口的3种实现.
二: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 中添加的应该是同一个类的对象当需要把一个对象放入 TreeSet 中,重写该对象对应的 equals() 方法时,应保证该方法与 compareTo(Object obj) 方法有一致的结果:如果两个对象通过 equals() 方法比较返回 true,则通过 compareTo(Object obj) 方法比较应返回 0
- 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)
- Comparator comparator()
0 0
- java集合框架总结(五)
- java总结(集合框架)
- Java:集合框架(五)——泛型集合
- Java集合框架总结
- java集合框架总结
- Java集合框架总结
- Java集合框架总结
- java集合框架总结
- java集合框架总结
- Java集合框架总结
- java集合框架总结
- Java集合框架总结
- Java集合框架总结
- java集合框架总结
- Java集合框架总结
- JAVA 集合框架总结
- java集合框架总结
- Java集合框架总结
- java集合框架总结(二)
- java集合框架总结(三)
- 最近工作上的一些烦恼
- C++面向对象第二周笔记<Boolan>
- java集合框架总结(四)
- java集合框架总结(五)
- git入门-----初步认识
- java集合框架总结(六)
- java集合框架总结(七)
- 基本数据类型和引用数据类型
- JAVA 3DES加密/解密
- Swagger与SpringMVC项目整合
- Google Gson的使用方法及JSON 技术对比
- JAVA性能优化:35个小细节让你提升java代码的运行效率