自己实现集合框架(八):可排序单链表的实现
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. 可排序单链表的移除
代码解释:
可排序单链表的删除,在实际的操作逻辑上和可排序的单链表的插入比较类似,都是需要比较大小,然后移动数据元素。三.测试
测试代码如下所示:运行效果如下图所示:
四.源代码示例
相关文章推荐
- 自己实现的集合框架
- 集合框架_TreeSet保证元素唯一性和比较器排序的原理及代码实现
- 集合框架——Set(TreeSet实现Comparator方法排序)
- 【慕课笔记】第六章 JAVA中的集合框架(下) 第8节 实现学生序列排序
- 自己实现集合框架(十二):顺序栈的实现
- [JAVA]集合框架之自己实现一个具有基本增查删改功能的ArrayList
- 自己动手实现集合框架类(一)之ArrayList
- TreeSet集合存放自定义类型的对象,可以使用比较器,实现Comparable接口自己设置排序方式
- 自己实现集合框架(十):双链表的实现
- 自己实现集合框架(五):利用单链表解决约瑟夫环问题
- 插入排序与冒泡排序集合框架实现
- java程序——用集合框架实现学生类的排序输出
- 自己实现集合框架(七):带头结点单链表的实现
- 自己实现集合框架(九):循环单链表的实现
- 自己动手实现集合框架类(四)之LinkedHashMap
- 自己实现集合框架(十三):链式栈的实现
- 自己动手实现集合框架类(三)之HashMap
- 自己实现集合框架(六):实现单链表逆转
- 集合框架_模拟斗地主洗牌和发牌并对牌进行排序的代码实现
- java8集合框架LinkedList类实现自己简单的理解