自己实现集合框架(八):可排序单链表的实现
来源:互联网 发布:护眼软件有用吗 编辑:程序博客网 时间: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. 可排序单链表的移除
代码解释:
可排序单链表的删除,在实际的操作逻辑上和可排序的单链表的插入比较类似,都是需要比较大小,然后移动数据元素。
三.测试
测试代码如下所示:
运行效果如下图所示:
四.源代码示例
- 自己实现集合框架(八):可排序单链表的实现
- 自己实现的集合框架
- 自己实现集合框架(七):带头结点单链表的实现
- 自己实现集合框架(九):循环单链表的实现
- 自己实现集合框架(十三):链式栈的实现
- 自己实现集合框架(十二):顺序栈的实现
- 自己实现集合框架(十):双链表的实现
- 自己实现集合框架(六):实现单链表逆转
- java8集合框架LinkedList类实现自己简单的理解
- 集合排序的实现
- 自己实现集合框架(十四):队列接口
- 实现自己的shell框架
- 初步理解spring ioc原理(读完可自己实现依赖注入部分的spring框架)
- 插入排序与冒泡排序集合框架实现
- java八种基本排序的实现
- 自己实现集合框架(十一):栈接口定义
- [JAVA]集合框架之自己实现一个具有基本增查删改功能的ArrayList
- 【java集合】自己实现简易的HashMap
- chrome插件“京东商品佣金助手”之京东云java web环境搭建(二)
- 程序猿专属的十一技能提升攻略!
- 一句代码搞定 RecycleView 侧滑菜单、添加头部底部、加载更多
- hdu 5976 Detachment
- 《docker技术入门与实战》reading note
- 自己实现集合框架(八):可排序单链表的实现
- 自己实现集合框架(九):循环单链表的实现
- 自己实现集合框架(十三):链式栈的实现
- 自己实现集合框架(十二):顺序栈的实现
- 自己实现集合框架(五):利用单链表解决约瑟夫环问题
- 自己实现集合框架(六):实现单链表逆转
- 自己实现集合框架(十):双链表的实现
- 自己实现集合框架(十四):队列接口
- The Little Redis Book中文版 第三章