java - 用于文本片段和类实例双向映射的数据模型

标签 java oop data-structures

GUI example

<小时/>

我想介绍与前面的示例类似的 GUI。

  • 左侧有一组段落(Paragraph类的实例),其中包含 单词的集合(字符串)。正如您所看到的 - 在文本中,有突出显示的文本片段(绿色、橙色、蓝色)
  • 文本片段是具体段落中单词的子集合。
  • 右侧是一组事实(Fact类的实例)
  • 每个事实都至少与一个文本片段相关联(可能还有更多 - 例如事实#2)。
<小时/>

代码片段:

public class Paragraph {
    private List<String> words;
    …
}

public class Fact {
    private String text;
    …
}
<小时/>

我希望这将是一个交互式 GUI(用户可以单击文本片段 => 例如,将弹出相应的事实/用户可以单击该事实 => 例如,仅显示相应的文本片段保持突出显示)。

因此,每个文本片段必须知道相应的事实,反之亦然。

Java中如何实现文本片段与对应事实的关联以及什么是合适的数据结构?

我指的是这种链接的数据模型,而不是 GUI 实现。我认为字数远高于文本片段的数量。

最佳答案

假设 1 个事实可以有多个段落,但 1 个段落只能属于 1 个事实。我将像这样实现这些类:

class Fact{

    private ArrayList<ParagraphText> paraTexts;
    private String text;        
    //any other attributes

    public Fact(){
        //initialization..
    }

    public void addParaText(ParagraphText p){
        paraTexts.add(p);
        p.linkWithFact(this);  //remember which fact p belongs to
    }

    public void removeParaText(ParagraphText p){
        if(paraTexts.contains(p)){
            p.unlinkFact();
            paraTexts.remove(p);
        }
    }
}

每当您将段落文本添加到事实时,该段落文本本身就会记住它属于哪个事实。

class ParagraphText{

    private int startPos;
    private int endPos;
    private Fact fact;
    //any other attributes

    public ParagraphText(int startPos, int endPos){
        this.startPos = startPos;
        this.endPos = endPos;
        //any other initializations
    }

    public void linkWithFact(Fact fact){
        this.fact = fact;
    }

    public void unlinkFact(){
        this.fact = null;
    }
}

关于java - 用于文本片段和类实例双向映射的数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41153023/

相关文章:

java - 如果我们发布代码中包含Javadoc的sources.jar,那么发布javadoc.jar不是重复的吗?

java - 如何使用maven pom xml文件创建目录结构

flutter - 覆盖抽象类Dart中的最终属性

algorithm - 从间隔列表中有效地找到重叠间隔

java - 在 Java 中镜像二叉树

java - 从 JSON Java Android 中的嵌入式 MongoID 中获取字符串

java - 使用递归方法计算位数

c++ - C++ 中的类开销

python - 传递的类实例何时需要在 python 中导入

具有动态点的二维最近邻查询算法