用父级对链接对象进行排序

时间:2019-06-20 10:49:46

标签: java algorithm sorting data-structures

我们有类别列表,其中每个类别可以具有父字段,该父字段引用当前类别的父类别。您能告诉我在Java中分类类别(例如从上到下类别)的最佳算法是什么?谢谢。

@Table
@Entity
public class Category {
     @Id
     Long id;
     @ManyToOne
     Category parent;
}

示例:

列表:

  • 类别(id = 3,父级=类别(id = 11))
  • 类别(id = 4,父级=类别(id = 3))
  • 类别(id = 11,父代=类别(id = 20,父代为空))

将像这样从上到下排序:

类别(id = 20)->类别(id = 11)->类别(id = 3)->类别(id = 4)

enter image description here

2 个答案:

答案 0 :(得分:0)

假设您已列出。您可以使用Collections.sort();对列表进行排序。 但是您的类必须进行一些更改,因为您必须实现Comparable并重写compareTo()方法。这是一个例子,希望对您有帮助。

public class Category implements Comparable<Category>{
    Long id;
    Category parent;
    // Constructors getters setters
    public int compareTo(Category aux){
       // Assuming you want to sort by parent's id, and I understand a category
       // maybe doesn't have parent it may be null
       if(aux.getParent() != null && this.parent != null){
           if(aux.getParent().getId() > this.parent.getId()) return -1;
           else if(aux.getParent().getId() < this.parent.getId()) return ;
           return 0;
       }
       if(aux.getParent() == null && this.parent.getId() == null) return 0;
       if(aux.parent() == null) return 1;
       return 0;
    }
}

答案 1 :(得分:0)

我看不到这里的排序方式。

  1. 搜索没有父项的类别
  2. 寻找它的孩子
  3. 转到2

这会为您提供所需的列表。

备注:
如果每个父母只有一个或没有一个孩子,您将得到一个示例中的列表。 (或多个列表),否则您将获得一棵树(或多个树)。

如果是“一个孩子或一个孩子”,则可以通过字段child扩展类别,使其成为双重链接列表。在这种情况下,“搜索它的子项”变得很简单,因为您直接对其进行了引用。