解决Java中的模糊结构

时间:2014-10-29 05:07:45

标签: java algorithm design-patterns

我有两个程序 一个创建一个结构,一个解析它

结构如下

class A {
    List<B>
}

class B {
    List<A>
}

现在问题是创建结构的程序不确定结构是否

A1->B1
 |->B2->A2
     |->A3->B3->A4

OR

A1->B1
 |->B3->A4
 |->B2->A2
     |->A3

有人可以提供一种方法来传递这种歧义,无论B3是附加到A1还是A3,这样第二个程序就可以知道存在歧义并可以根据某些约束来决定使用哪种结构。

3 个答案:

答案 0 :(得分:2)

您可以将结构表示为具有两种节点(A和B)和两种链接(从A到B,反之亦然)的图形。

class A {}

class B {}

class Link<F,T> {
    F from;
    T to;
}

class Structure {
    List<A> a;
    List<B> b;
    List<Link<A,B>> a2b;
    List<Link<B,A>> b2a;
}

约束应确保链接仅在图的节点之间。

歧义将由朝向同一节点的多个链接表示。

答案 1 :(得分:0)

如果这些是您遇到的唯一两种结构,那么您只需检查A1有多少元素:

boolean useFirstStructure = (A1.size()==2);

使用第二种结构,您将拥有A1.size()==3

但CKuck的回答是处理更多一般结构的正确方法。

答案 2 :(得分:-1)

如果您启动代码,请执行以下操作:

 new A(
   List(
     new B(List()),
     new B(
       List(
           new A(List()),
           new A(List(new B(List(new A())
           )
       )
    )
 )

你会得到

A1->B1
 |->B2->A2
     |->A3->B3->A4

如果您启动这样的代码:

 new A(
   List(
     new B(List(new A(List())),
     new B(List(new A(List()),
     new B(List(new A(List()), new A(List())))

你会得到

A1->B1
 |->B3->A4
 |->B2->A2
     |->A3

您将能够序列化和反序列化两种表示形式。

你的歧义是什么意思?