需要排序的类:
public class ExperimentContent{
private Long conetentId;//内容id 非空唯一 自增
private Long preContentId; //上级节点id
private Long nextContentId;//下级节点
}
具体实现:
public List<ExperimentContent> getByExId(Long experimentId) {
//从数据库中获取需要排序的的所有对应实体类
List<ExperimentContent> ecs = experimetContentMapper.selectByExId(experimentId);
//如果是一个直接返回,如果不是再往下走
if(ecs.isEmpty() || ecs.size()==1){
return ecs;
}
//定义一个排序的结果集
List<ExperimentContent> result = new ArrayList<>();
//再从获取列表的首项
ExperimentContent begin = experimetContentMapper.selectHeadContentByExId(experimentId);
//将首项从集合中删除
ecs.remove(begin);
//将首相放入结果集中
result.add(begin);
//循环
while(begin.getNextContentId()!=null){//判断当前的元素的下一个节点是否存在 存在继续循环
for (ExperimentContent experimentContent : ecs) {
//如果是当前元素
if(experimentContent.getConetentId() == begin.getNextContentId()){
//将元素从集合中取出作为新的节点,放入结果集,
begin = experimentContent;
result.add(begin);
//并将该元素从遍历的结合中删除
ecs.remove(begin);
//结束当前循环
break ;
}
}
}
return result;
}
实际代码讲的有点模糊,举一个简单的例子,main方法共大家学习下:
public static void main(String[] args) {
//定义一个无序集合,初始化一些数据 模拟链表
List<Integer> intList = new ArrayList<Integer>();
intList.add(1);intList.add(3);intList.add(2);intList.add(5);intList.add(4);
//链表集合大小
int sum = intList.size();
//定义一个空集,用于存放排序后的结果集
List<Integer> result = new ArrayList<Integer>(sum);
//我们假定首项是 1
Integer begin = 1;
//将首项放入结果集中
result.add(begin);
//并从链表中删除
intList.remove(begin);
//位移到首项的下一项 也就是第二项
begin = begin+1;
//循环
while(begin<=sum){ //判断,总项目不能超过集合总数
//遍历链表
for (Integer temp : intList) {
//如果匹配,将元素从链表中截取出来,放入结果集中,并中断本次循环
if(temp == begin){
result.add(temp);
begin = temp+1;
intList.remove(temp);
break;
}
}
}
//遍历排序后的结果集
for (Integer temp : result) {
System.out.println(temp);
}
}
//结果如下:
1
2
3
4
5
版权声明:本文为CSDN博主「weixin_33877092」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_33877092/article/details/91685554
原文链接:https://blog.csdn.net/weixin_33877092/article/details/91685554
更多相关推荐
单向链表归并排序 Java
单向链表归并排序useJava链表的关键在于递归的时候中间位置的确定,方法是:用两个指针p,f遍历链表,p走一步而f走两步;当f走完的时候p走到链表的一半!这让我烧绳子那道逻辑题。代码如下
单向链表插入排序 Java
游动指针h;待插入节点指针pt节点插入关键:h.next=pt;不可能是h=pt,链到指针的末尾没用呀,要链到节点末尾默认无头结点,无头结点的思路:三种可能1.比较头部2.循环比较中间3.追加末尾为何比较头节点:因为循环中间...
常见的链表排序(Java版)
上篇博客中讲解了九大内部排序算法,部分算法还提供了代码实现,但是那些代码实现都是基于数组进行排序的,本篇博客就以链表排序实现几种常见的排序算法,以飨读者。 快速排序的链表实现算法思想:对于一个链表....
Java单链表归并排序
概念归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用,归并排序将两个已排序的表合并成一个表。归并排序基本原理通过对若干个有序结点序列的归并来实...
合并K个排序链表(java实现)
题目: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例: 在别的博客中看到另一种解法,就是用优先队列,感觉挺高大上的,所以贴出来和大家分享,只是上面的方法我们容易理解一些罢了。代...