求一个java排序算法

对java有感觉 2013-03-28 11:31:30
格式如下
主键 名称 父节点
A1 B1 0
A2 B2 0
A3 B3 A1
A4 B4 A1
A5 B5 A2
A6 B6 A3
现在呢我想得到这样一个顺序
A1 B1 0
A3 B3 A1
A6 B6 A3
A4 B4 A1
A2 B2 0
A5 B5 A2
也就是说如果改主键下面一个父节点关联它就放到对于的主键下面。
...全文
137 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
飘逸的腿毛 2013-04-08
  • 打赏
  • 举报
回复
好吧 我愚钝 没看出啥顺序
对java有感觉 2013-04-05
  • 打赏
  • 举报
回复
恩 其实就树的一个算法。
对java有感觉 2013-03-31
  • 打赏
  • 举报
回复
规律很简单啊。 其实你查询数据库的时候 不是有个主键和名称还有父节点 然后遍历的时候先遍历父节点为0的然后第一条记录(A)就有一个主键然后得到这个主键的与另外一个记录(B)的父节点如果一样就把这条记录(B)放到它(A)的下面,然后得到记录B的主键如果在有记录C如果与记录B的主键一样则把记录C放到B的下面就这样循环。反正保证一条原则如果有一条记录关联另外一条记录的主键则必须要放到该记录下面。
坚持2012 2013-03-31
  • 打赏
  • 举报
回复
我也没看出来什么规律
qq2389835815 2013-03-31
  • 打赏
  • 举报
回复
嗯,太简单了,直接拿个树出来,先序遍历
tianma630 2013-03-28
  • 打赏
  • 举报
回复
输出结果: A1,0 A3,A1 A6,A3 A4,A1 A2,0 A5,A2 代码 (主要用到叠代)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class t1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<Map<String,String>> list = new ArrayList<Map<String,String>>();
		Map<String,String> m1 = new HashMap<String, String>();
		m1.put("id", "A1");
		m1.put("p_id", "0");
		Map<String,String> m2 = new HashMap<String, String>();
		m2.put("id", "A2");
		m2.put("p_id", "0");
		Map<String,String> m3 = new HashMap<String, String>();
		m3.put("id", "A3");
		m3.put("p_id", "A1");
		Map<String,String> m4 = new HashMap<String, String>();
		m4.put("id", "A4");
		m4.put("p_id", "A1");
		Map<String,String> m5 = new HashMap<String, String>();
		m5.put("id", "A5");
		m5.put("p_id", "A2");
		Map<String,String> m6 = new HashMap<String, String>();
		m6.put("id", "A6");
		m6.put("p_id", "A3");
		
		list.add(m1);
		list.add(m2);
		list.add(m3);
		list.add(m4);
		list.add(m5);
		list.add(m6);
		
		List<Map<String,String>> result = sort(list,"0");
		
		for (Map<String, String> map : result) {
			System.out.println(map.get("id")+","+map.get("p_id"));
		}
		
	}
	
	public static List<Map<String,String>> sort(List<Map<String,String>> list,String id){
		List<Map<String,String>> result = new ArrayList<Map<String,String>>();
		for (Map<String, String> map : list) {
			if(id.equals(map.get("p_id"))){
				result.add(map);
				result.addAll(sort(list,map.get("id")));
			}
		}
		return result;
	}

}
huage 2013-03-28
  • 打赏
  • 举报
回复
看不出你的这个有什么规律 , 没有规律的怎么排序呢
对java有感觉 2013-03-28
  • 打赏
  • 举报
回复
或者直接用sql也可以 反正只要得到这个顺序的list集合就OK了
quiwerty 2013-03-28
  • 打赏
  • 举报
回复
规律不是很明显,确实没法找出个什么好算法

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧