JAVA 链表排序(1)

需要排序的类:

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

猜你喜欢

转载自my.oschina.net/u/3361262/blog/1817224
今日推荐