譬如说有个User对象,它有2个属性id和parentid,这个tree可以根据这2个属性进行深度优先的排序。

解决方案 »

  1.   

    就是这样
    userid userpid
    0      null
    1      0
    2      3  
    3      0
    4      1
    5      2
    6      2
    7      1
    8      1
    9      3
    10     3最后排序结果
    userid
    0
    1
    4
    7
    8
    3
    2
    5
    6
    9
    10
      

  2.   

    你给的例子无非就是一个按某个属性排序,JDK本身有Arrays.sort()和Collections.sort()可以使用。你举的例子根Tree没有什么关系,另外深度优先貌似是一种搜索算法。
      

  3.   

    java中没有这种数据结构,估计lz要自己写了
      

  4.   

    说的是 javax.swing.JTree 么?如果是的话查看JDK API
      

  5.   

    没有Tree这种数据结构,LZ可以自己写一个Tree类,如果是用Swing 和AWT 的话,到有一个JTree,这貌似跟LZ说的不事一回事。楼主说的是对对象进行按某个属性值排序,是吗?这样的情况一般是要自己来完成的,如对班里的学生按总分排序,得到一个什么样的序列;或按单科成绩排序得到另外的一个顺序。
      

  6.   

    写了个,报错,有人帮忙看看吗?我基础不太好
    package ce;import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    public class Tree {
    private List<Object[]> deepList;
    public List toDeepTree(List list)
    {
    //System.out.println(list.size());
    //System.out.println(deepList==null?0:deepList.size()+" "+(list==null?0:list.size()));
    int index=0;
    int index2=0;
    if(list==null||list.size()==0)
    return deepList;
    Object obj[];
    Iterator it=list.iterator();
    if(deepList==null)
    {
    while(it.hasNext())
    {
    obj=(Object[])it.next();
    if(obj[1]==null)
    {
    deepList.add(obj);
    list.remove(index);
    toDeepTree(list);
    }
    index++;
    }
    }
    else
    {
    Object objTemp[]=(Object[])deepList.get(deepList.size()-1);
    while(it.hasNext())
    {
    obj=(Object[])it.next();
    if(obj[1].equals(objTemp[0]))
    {
    deepList.add(obj);
    list.remove(index2);
    toDeepTree(list);
    }
    index2++;
    }
    }
    return deepList;
    }
    public static void main(String[] s)
    {
    Object obj1[]={0,null};
    Object obj2[]={1,0};
    Object obj3[]={2,3};
    Object obj4[]={3,0};
    Object obj5[]={4,1};
    Object obj6[]={5,2};
    Object obj7[]={6,2};
    Object obj8[]={7,1};
    Object obj9[]={8,1};
    Object obj10[]={9,3};
    Object obj11[]={10,3};
    List list=new ArrayList();
    list.add(obj1);
    list.add(obj2);
    list.add(obj3);
    list.add(obj4);
    list.add(obj5);
    list.add(obj6);
    list.add(obj7);
    list.add(obj8);
    list.add(obj9);
    list.add(obj10);
    list.add(obj11);
    /*
    Iterator ite=list.iterator();
    while(ite.hasNext())
    {
    Object o[]=(Object[])ite.next();
    System.out.println(o[0]+" "+o[1]);
    }
    */
    Tree tree=new Tree();

    List dlist=tree.toDeepTree(list);
    if(dlist==null) System.out.println("null");
    Iterator it=dlist.iterator();
    while(it.hasNext())
    {
    Object o[]=(Object[])it.next();
    System.out.println(o[0]+" "+o[1]);
    }

    }}
      

  7.   

    改了下,在递归回出来的时候还是会报异常,有高手帮忙看看吗?package ce;import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    public class Tree {
    private List<Object[]> deepList=new ArrayList();//假设Object[]长度为2,object[0]表示id,object[1]表示pid
    public void toDeepTree(List list,Object pid)
    {
    //System.out.println(list.size());
    //System.out.println(deepList==null?0:deepList.size()+" "+(list==null?0:list.size()));
    int index=0;
    int index2=0;
    if(list==null||list.size()==0)//如果源list为空(相当于队列为空时)返回
    return;
    Object obj[];
    Iterator it=list.iterator();
    if(deepList==null||deepList.size()==0)//如果目标list为空,则放一个根元素进去(这里假设根元素是唯一的)
    {
    while(it.hasNext())
    {
    obj=(Object[])it.next();
    if(obj[1]==null)//如果pid为null,说明这个是根元素
    {
    deepList.add(obj);
    list.remove(index);//把该元素移出
    //it=list.iterator();
    toDeepTree(list,obj[0]);//重新来一次
    }
    index++;//对应源list的索引++
    }
    return ;//如果没有pid为null的object[],则返回
    }
    else
    {
    //Object objTemp[]=(Object[])deepList.get(deepList.size()-1);
    while(it.hasNext())
    {
    obj=(Object[])it.next();

    if(obj[1].equals(pid))//如果该obj[]的pid等于它上面那个元素的id,则在目标list中加入该obj[]
    {
    deepList.add(obj);
    list.remove(index2);//移出
    index2=-1;//为避免数组越界,将index2置为-1,然后下面index2++的时候又置为0。
    it=list.iterator();//因为list已经改变,所以重新跌代
    toDeepTree(list,obj[0]);//再来一次
    }
    index2++;
    }
    if(list==null||list.size()==0)
    return ;
    }
    }
    public List getList()
    {
    return deepList;
    }
    public static void main(String[] s)
    {
    Object obj1[]={0,null};
    Object obj2[]={1,0};
    Object obj3[]={2,3};
    Object obj4[]={3,0};
    Object obj5[]={4,1};
    Object obj6[]={5,2};
    Object obj7[]={6,2};
    Object obj8[]={7,1};
    Object obj9[]={8,1};
    Object obj10[]={9,3};
    Object obj11[]={10,3};
    List list=new ArrayList();
    list.add(obj1);
    list.add(obj2);
    list.add(obj3);
    list.add(obj4);
    list.add(obj5);
    list.add(obj6);
    //list.add(obj7);
    list.add(obj8);
    //list.add(obj9);
    //list.add(obj10);
    //list.add(obj11);
    /*
    Iterator ite=list.iterator();
    while(ite.hasNext())
    {
    Object o[]=(Object[])ite.next();
    System.out.println(o[0]+" "+o[1]);
    }
    */
    Tree tree=new Tree();

    tree.toDeepTree(list,null);
    List dlist=tree.getList();
    if(dlist==null) System.out.println("null");
    Iterator it=dlist.iterator();
    while(it.hasNext())
    {
    Object o[]=(Object[])it.next();
    System.out.println(o[0]+" "+o[1]);
    }

    }}
      

  8.   

    toDeepTree(这里用两个List好处理些吧。
      

  9.   

    package util;
    import java.util.ArrayList;
    import java.util.ConcurrentModificationException;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.Map.Entry;    
    public class Tree {
        private List<Object[]> deepList=new ArrayList();//假设Object[]长度为2,object[0]表示id,object[1]表示pid
        private Set<List> set=new HashSet<List>();
            
        public void toDeepTree(Map map,Object pid)
        {
            //System.out.println(list.size());
            //System.out.println(deepList==null?0:deepList.size()+" "+(list==null?0:list.size()));
         
            int index=0;
            int index2=0;
            if(map==null||map.size()==0)//如果源list为空(相当于队列为空时)返回
                return;
            Object obj[];
                  
            
            Iterator it=map.entrySet().iterator();
            try {
              if(deepList==null||deepList.size()==0)//如果目标list为空,则放一个根元素进去(这里假设根元素是唯一的)
                 {
                     while(it.hasNext())
                     {
                      Map.Entry key=(Entry) it.next();
                         obj=(Object[])key.getValue();
                         if(obj[1]==null)//如果pid为null,说明这个是根元素
                         {
                             deepList.add(obj);
                            
                             it.remove(); 
                             map.remove(obj[0]);//把该元素移出                       
                             //it=list.iterator();
                             toDeepTree(map,obj[0]);//重新来一次
                         }
                         index++;//对应源list的索引++
                     }                
                     return ;//如果没有pid为null的object[],则返回
                 }
                 else
                 {
                     //Object objTemp[]=(Object[])deepList.get(deepList.size()-1);
                     while(it.hasNext())
                     {
                      Map.Entry key=(Entry) it.next();
                         obj=(Object[])key.getValue();
                         
                         if(obj[1].equals(pid))//如果该obj[]的pid等于它上面那个元素的id,则在目标list中加入该obj[]
                         {
                             deepList.add(obj);
                             
                             it.remove();
                             map.remove(obj[0]);//移出
                             index2=-1;//为避免数组越界,将index2置为-1,然后下面index2++的时候又置为0。
                             //it=list.iterator();//因为list已经改变,所以重新跌代
                             toDeepTree(map,obj[0]);//再来一次
                         }
                         index2++;
                     }
                    
                     if(map==null||map.size()==0){
                         return ;
                     }
                 }
      } catch (ConcurrentModificationException e) {
      //以最后以为向上添加
      for(int i=deepList.size()-1;i>0;i--){
      Object[] obj1=(Object[])deepList.get(i);
      toDeepTree(map,obj1[1]);//再来一次
      }     
      }
           
            //System.out.println(index);
        }
        public List getList()
        {
            return deepList;
        }
        public static void main(String[] s)
        {
            Object obj1[]={0,null};
            Object obj2[]={1,0};       
            Object obj3[]={3,0};
            Object obj4[]={4,1};
            Object obj5[]={7,1};
            Object obj6[]={8,1};
            Object obj7[]={2,3};
            Object obj8[]={9,3};
            Object obj9[]={10,3};
            Object obj10[]={15,2};
            Object obj11[]={6,2};
            Object obj12[]={5,7};
            
                       Map<Integer,Object[]> map=new HashMap<Integer,Object[]>();
            map.put(0, obj1);
            map.put(1, obj2);
            map.put(3, obj3);
            map.put(4, obj4);
            map.put(7, obj5);
            map.put(8, obj6);
            map.put(2, obj7);
            map.put(9, obj8);
            map.put(10, obj9);
            map.put(15, obj10);
            map.put(6, obj11);
            map.put(5, obj12);
            
          
            Tree tree=new Tree();
            List remList=new ArrayList();
            tree.toDeepTree(map,null);
            List dlist=tree.getList();
            if(dlist==null) System.out.println("null");
            Iterator it=dlist.iterator();
            while(it.hasNext())
            {
                Object o[]=(Object[])it.next();
                System.out.println(o[0]+" "+o[1]);
            }
           
            
        }}  
      

  10.   

    用以上方法就可以了,删除集合中的对象不要用list,他的下标不好控制。建议用map或set