今天去面试,面试官出的题目是一张部门表,里面有三个字段,一个是ID,一个是部门名称,还有一个是上级部门的ID,他的要求是用一种方法以树的形式在后台展现出来以方便在前台显示,我当时是用的hibernate的树状映射,但面试的时候他说这不是他想要的答案,最后我们所有同学都面试完了,只有一个同学的答案是他想要的,我问那个同学,他说用什么结构、类什么的,还有什么二维数组一样,具体的他也没给我说清楚,所以想请教一些这里的高手,这个到底怎么实现?就是用结构啊类啊什么的,这个问题不搞清楚的话我这心里就始终不舒服,麻烦哪个高手指点一下了,谢谢!

解决方案 »

  1.   

    这个如果你用HIBERNATE 1对多就好了
    页面显示树形结构其实都是大同小异 把没有上级部门的作为根节点 向下遍历 ~~
      

  2.   

    不是递归,我说了递归的,但他说不是他想要的,他说要用什么结构和类什么的,我没弄明白,java里的结构是什么东东?我只知道C#里有结构!java还真没用过!
      

  3.   

    奥。知道呀。 一个表 用递归查询嘛。 oracle自带有一个属性。 可以通过那个查下一级。 
      

  4.   

    上级部门和下级部门 都是部门。
    他们唯一的不同就是所属不同。A 部门属于 顶级
    B 部门属于 A部门那么就可以通过 所属部门id 进行迭代查出所有的关系。
      

  5.   

    HashMap<String id,HashMap>这个数据结构可以解决了,如果有子节点就添加到HashMap。
    如:有父节点parentID, 子节点ID1,ID2,ID3
    HashMap childHashMap;
    childHashMap.put(ID1,Object);
    childHashMap.put(ID2,Object)
    childHashMap.put(ID3,Object)
    parentHashMap.put(ParentID,childHashMap);
      

  6.   

    类:属性对应数据库
    数组:存储类的对象,有一个对象加载进来时,从数组里找到父结点,修改其父结点标志(这里方法很多,可以是父结点在数据中的下标),可以是父结点的引用等。
    甚至还可以使用多叉树等,树的结构存储方法很多。
    还要考虑到数据的加载是否动态加载,递归查询如在Oracle里可以直接使用数据库提供的功能实现递归查询,但是其他很多数据库不支持递归查询,这个时候就需要其他的方法来查询。以前做过一个上下级无限制级数的系统,就使用过上面提到的这些。