| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> TreeSet集合使用 -> 正文阅读 |
|
[数据结构与算法]TreeSet集合使用 |
我们常常听到java中有红黑树算法,这个据我了解最难的数据结构知识点不知是在java中扮演了什么样的角色,但是知道我学习到TreeSet,他才揭开了他的面纱。当然这里不是讲红黑树的,我对数据结构所知甚浅,甚至二叉树都没有学到。当然也不配在这里讲述红黑树。但是,不讨论底层并不代表不能讨论他的应用,这次就来讲讲红黑树在java中的应用——TreeSet。 众所周知,TreeSet是属于Set这一类型的集合,他们的最大的特点就是无序,并且没有重复的数据。每个Set集合的判断是否为重复的方法都不一样,比如HashSet的方法就是运用Hash表来算所有数据的Hash值,并配合equals方法来判断是否为重复数据,当然LinkedhashSet只是其一个链式存储,其于HashSet的最大的区别在于LinkedhashSet可以根据输入的顺序进行遍历,但是其在底层的存储还是处于无序状态。只是通过链式结构去获取数据的顺序而已。 而TreeSet和这些Set的最大的区别在于底层的储存数据结构为树形结构,因此在其存储的时候就可以对其进行自动排序,以下是TreeSet的实例化方法: TreeSet setone=new Treeset(); 括号里可以放入自己写入的compare方法,当然也可以不放,不放的话就用其默认的判断方法,默认方法只能排序基本数据类型,如果让其排序类就会出现问题。 这里抛出了ClassCastException异常。需要我们放入比较器(comparator) 当然使用比较器(comparator)在之前的类中也有接触,这里重新写一个匿名comparator方法。? ?可以看出是在括号中重写的,当然重写的步骤在这里要重新讲解下 1.实例化一个comparator对象。 2.在对象中重写compare方法,会自动创建一个带有两个object参数的方法 重写compare方法步骤 2.1用instanceOf判断两个compare方法是否为需要判断的对象的子类,如果不是抛出异常。 2.2向下转型,将object对象强制转换为自己需要比较的对象类型。 2.3调用自己需要比较的数据类型,然后进行比较,比较大的用1,比较小的用-1,相等就用0。 可以看出我在这里写的对象是比较两个对象的name,而name又是用String类型,所以直接用了equals方法进行比较。 3.添加数据,添加的数据要与比较器比较的数据一致。 这里我添加的是比较器中的数据类型,也就是具有name类型的Test类,这个类中有两个元素,一个是name,另一个是age(年龄)。所以存储的时候底层是通过比较name字符类型来进行存储。 4.输出? 当然这里要重写Test类的toString方法,否则输出的结果是其对象的地址。 ?我们比较字符串的顺序的根据26个字母的先后顺序来进行排序,比如说J在T的前面。那么输出顺序是先输出Jeck后输出name。 我们根据结果来看,是先输出Jeck后输出Tom。跟输入的顺序不一样。因此也可以说明是否底层的存储数据也是根据Comparator比较器来进行排序。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 17:25:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |