ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java集合之TreeSet

2019-07-06 16:55:06  阅读:167  来源: 互联网

标签:Object Java 对象 元素 集合 排序 TreeSet


概述

TreeSet是SortedSet的实现类,可以确保集合元素处于排序状态(根据元素实际值的大小进行排序)

TreeSet采用红黑树的数据结构来存储集合元素,且支持两种排序方法:自然排序和定制排序,默认采用自然排序

常用方法

Object first()                                    返回第一个元素

Object last()                                     返回最后一个元素

Object lower(Object e)                    返回指定元素的前一个元素

Object higher(Object e)                   返回指定元素的后一个元素

SortedSet subSet(Object fromElement Object toElement):            [fromElement,toElement)

SortedSet headSet(Object toElement):                                            [                    ,toElement)

SortedSet tailSet(Object fromElement):                                           [fromElement,                )

Comparator comparator():如果TreeSet采用了定制排序,则返回定制排序所使用的Comparator.如果是采用自然排序,就返回null


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

Java提供了一个Comparable接口,该接口定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现该接口的类必须实现该方法,实现了该接口的类的对象就可以比较大小。

TreeSet中的元素应该是同一个类的对象

当把一个对象加入TreeSet集合时,TreeSet调用该对象的compareTo(Object obj)方法与容器中的其他对象比较大小,然后根据红黑树结构找到它的存储位置。

如果两个对象通过compareTo(Object obj)比较相等,新对象将无法添加到TreeSet集合中。

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

注:把一个对象添加到TreeSet时,该对象的类必须实现Comparable接口

定制排序:通过Comparator接口的帮助,实现定制排序。该接口里包含了一个int compare(T o1,T o2)方法,用于比较o1和o2的大小

在创建TreeSet集合对象时,提供一个Comparator对象与TreeSet集合关联,由该Comparator对象负责集合元素的排序逻辑

TreeSet ts = new TreeSet((o1,o2) -> 

{

    M m1 = (M)o1;

    M m2 = (M)o2;

    return m1.age > m2.age ? -1 : m1.age < m2.age ? 1:0

})

 注:M是一个自定义类,关键变量是age


标签:Object,Java,对象,元素,集合,排序,TreeSet
来源: https://blog.51cto.com/13646338/2417732

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有