Java 文本片段和类实例双向映射的数据模型
Java 文本片段和类实例双向映射的数据模型,java,oop,data-structures,Java,Oop,Data Structures,我想介绍与前面示例类似的GUI 在左侧,有一组包含 单词的集合(字符串)。如您所见–在文本中,有突出显示的文本片段(绿色、橙色、蓝色) 文本片段是来自具体段落的单词的子集合 在右侧,有一组事实(事实类的实例) 每个事实与至少一个文本片段关联(可能有更多–例如事实#2) 代码片段: 公共类段落{ 私人列表词; … } 公开课事实{ 私有字符串文本; … } 我希望这将是一个交互式GUI(用户可以单击文本片段=>例如,将弹出相应的事实/用户可以单击事实=>例如,仅突出显示相应的文本片段)
我想介绍与前面示例类似的GUI
- 在左侧,有一组包含 单词的集合(字符串)。如您所见–在文本中,有突出显示的文本片段(绿色、橙色、蓝色)
- 文本片段是来自具体段落的单词的子集合
- 在右侧,有一组事实(事实类的实例)
- 每个事实与至少一个文本片段关联(可能有更多–例如事实#2)
代码片段:
公共类段落{
私人列表词;
…
}
公开课事实{
私有字符串文本;
…
}
我希望这将是一个交互式GUI(用户可以单击文本片段=>例如,将弹出相应的事实/用户可以单击事实=>例如,仅突出显示相应的文本片段) 因此,每个文本片段都必须知道相应的事实,反之亦然 如何在Java中实现文本片段和相应事实之间的链接,以及什么是合适的数据结构?
我指的是这个链接的数据模型,而不是GUI实现。我认为字数远高于文本片段的数量。假设一个事实可以有多个段落,但一个段落只能属于一个事实。我将按照如下方式实现这些类:
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);
}
}
}
@PM77-1是的,类似于我需要的双向地图。实际上,我对文本片段的数据结构的建议有问题。如何处理这些信息?我认为每个字符串单词都有一个特殊的类,但大多数单词不是某个文本片段的一部分。@user3437460是的,如果你的意思是从具体文本片段引用回事实的话。一个段落能与多个事实相关吗?@user3437460是的,但关系是具体文本片段=一组单词(不是整个段落)之间的关系事实也是如此。一个段落可以包含多个文本片段。@David让我知道它是否有用。谢谢,但我认为我们对该段落有不同的看法。本文中的段落只是一个类似于单词集合的包装器。事实与整段文字无关,而只与该段文字有关。我的例子中的事实1与7有关。八,。第一段的单词。很抱歉,可能我的介绍描述中没有清楚地提到。@David为了便于阅读,我尝试使用较短的名称。这并不意味着它是整个段落,否则我就不会包括开始和结束位置。为了清晰起见,我对命名进行了编辑。
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;
}
}