自己实现集合框架(八):可排序单链表的实现

来源:互联网 发布:护眼软件有用吗 编辑:程序博客网 时间:2024/06/15 12:34

一. 什么叫可排序的单链表?

场景描述:
在项目中我们常常会有这样的需求,在存放元素的时候可以预先按照数值大小进行排序(升序或降序),那么在取出数据的时候就不需要再次排序了。
什么叫可排序的单链表?
可排序的单链表指单链表各结点的数据域data的值按照递增(由小到大)或者递减(由大到小)的方式链接起来。
如何实现可排序的单链表?
我们都知道java里面的TreeSet集合是可排序的,并且支持自然排序和定制排序两种方式。那么可排序的单链表是如何做到可排序的呢?
一个对象要能够进行排序比较大小,它必须要实现java.lang.Comparable接口,并实现该接口的compareTo()方法,该方法返回一个整数值,当一个对象调用该方法与另外一个对象进行比较时,例如obj1.compareTo(obj2),如果该方法返回0,则表明这两个对象相等;如果该方法返回一个正整数,则表明obj1大于obj2;如果该方法返回一个负整数,则表明obj1小于obj2。那么单链表要实现可排序,则结点data域的对象必须是可比较大小的,即已经实现了java.lang.Comparable接口的compareTo()方法。

二. 可排序单链表的实现

1.定义可排序单链表

可排序单链表类SortedHeadSinglyLinkedList声明如下,它继承带头结点的单链表类HeadSinglyLinkedList,二者相同的方法不再介绍,请参见之前的文章自己实现集合框架(七):带头结点单链表的实现,只是在插入元素和移除元素的时候会有不一样,也就是需要比较大小,代码如下所示:

2. 可排序单链表的插入

代码解释:

1. 插入的元素对象不能为空,并且需要实现Comparable接口。
2. 插入规则是,从空链表开始,逐个插入结点建立排序的单链表,每插入一个结点,首先要从单链表的第0个节点开始,将待插入元素elment依次与当前结点的data值比较大小,以确定插入位置并进行插入操作。

3. 可排序单链表的移除

代码解释:

可排序单链表的删除,在实际的操作逻辑上和可排序的单链表的插入比较类似,都是需要比较大小,然后移动数据元素。

三.测试

测试代码如下所示:

运行效果如下图所示:

四.源代码示例

阅读全文
0 0
原创粉丝点击