淘先锋技术网

首页 1 2 3 4 5 6 7

需要排序的类:

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

 

常见的链表排序(Java版)

    上篇博客中讲解了九大内部排序算法,部分算法还提供了代码实现,但是那些代码实现都是基于数组进行排序的,本篇博客就以链表排序实现几种常见的排序算法,以飨读者。 快速排序的链表实现算法思想:对于一个链表....

Java单链表归并排序

概念归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用,归并排序将两个已排序的表合并成一个表。归并排序基本原理通过对若干个有序结点序列的归并来实...

合并K个排序链表(java实现)

题目: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例: 在别的博客中看到另一种解法,就是用优先队列,感觉挺高大上的,所以贴出来和大家分享,只是上面的方法我们容易理解一些罢了。代...