您的位置:首页 > 其它

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

2017-05-27 00:00 260 查看




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

场景描述:
在项目中我们常常会有这样的需求,在存放元素的时候可以预先按照数值大小进行排序(升序或降序),那么在取出数据的时候就不需要再次排序了。
什么叫可排序的单链表?
可排序的单链表指单链表各结点的数据域
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. 可排序单链表的移除



代码解释:

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

三.测试

测试代码如下所示:

运行效果如下图所示:



四.源代码示例

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: