java 链表升序_JAVA 链表排序(1)

需要排序的类:

public class ExperimentContent{

private Long conetentId;//内容id 非空唯一 自增

private Long preContentId; //上级节点id

private Long nextContentId;//下级节点

}

具体实现:

public List getByExId(Long experimentId) {

//从数据库中获取需要排序的的所有对应实体类

List ecs = experimetContentMapper.selectByExId(experimentId);

//如果是一个直接返回,如果不是再往下走

if(ecs.isEmpty() || ecs.size()==1){

return ecs;

}

//定义一个排序的结果集

List 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 intList = new ArrayList();

intList.add(1);intList.add(3);intList.add(2);intList.add(5);intList.add(4);

//链表集合大小

int sum = intList.size();

//定义一个空集,用于存放排序后的结果集

List result = new ArrayList(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值