为什么一个类中只有一个arraylist包含所有对象的变量?

时间:2019-05-25 10:41:44

标签: java class oop arraylist

我在标题中提到了一个问题。我将为您迈出第一步,让您了解我正在尝试做的事情。首先,为了总结我的课程,我在下面展示了它们:

Classes
|___ Starter.java (main class)
|___ Line.java
|___ CrossSection.java
|___ SectionAssigner.java

在我的主类中,我创建了ArrayList变量,用于保存 Line SectionAssigner CrossSection 类中的对象:

public static void main(String[] args) {
    ArrayList<Line> lines = new ArrayList<Line>();
    ArrayList<Line> lineKeeper = new ArrayList<Line>();
    ArrayList<CrossSection> crossSections = new ArrayList<CrossSection>();
    ArrayList<SectionAssigner> sectionAssigners = new ArrayList<SectionAssigner>();
}
SectionAssigner 类的构造函数获得两个参数,分别是 ArrayList CrossSection

public SectionAssigner(ArrayList<Line> lineList, CrossSection crossSection){
    this.lineList = lineList;
    this.crossSection = crossSection;
}

此外, SectionAssigner 类使用 getLinesLength()函数返回所有行( this.linelist )的长度:

public ArrayList<Double> getLinesLength(){
    for (int k=0; k<this.lineList.size(); k++) {
        this.returnedIndex.add(this.lineList.get(k).getLength());
    }
    return this.returnedIndex;
}

在主类的以下代码行中,我要求用户“您要分配给SectionAssigner的哪些行和横截面?”,然后将用户行选择保留在 linekeeper 中>变量和 crossSectionIndex 变量中的横截面索引。然后,使用这些数据,我从 SectionAssigner 创建一个新变量,该变量也插入到 sectionAssigners ArrayList:

sectionAssigners.add(new SectionAssigner(lineKeeper, crossSections.get(crossSectionIndex)));

最后,我向用户显示哪些行分配了哪些部分:

System.out.println("SectionAssigned" + counter + ": " + sectionAssigners.get(counter).getLinesLength() ); 

这些代码和我想做的事情可能很难理解,因此我将在下面举例说明它们:

让我们说用户有6行的索引为

Line0
Line1
Line2
Line3
Line4
Line5

之后,用户要进行如下横截面分配:

SectionAssign0: Line0, Line1
SectionAssign1: Line2, Line3, Line4, Line5

因此,在上述示例中,控制台应在SectionAssign0中显示line0和line 1; SectionAssign1中的line2,line3,line4,line5。但是控制台显示如下,而不是:

SectionAssign0: Line0, Line1, Line2, Line3, Line4, Line5
SectionAssign1: Line0, Line1, Line2, Line3, Line4, Line5

我不完全了解ArrayList的用法。一个类中一个ArrayList的元素是否保留所有从此类创建的对象?还是我犯了致命的错误?

1 个答案:

答案 0 :(得分:0)

  

一个类中一个ArrayList的元素是否保留从该类创建的所有对象?

不,只有那些人也添加了。

问题在这里:

sectionAssigners.add(new SectionAssigner(lineKeeper, crossSections.get(crossSectionIndex)));

您所有的sectionAssigners都使用相同 ArrayListlineKeeper)。如果您希望他们分开存储东西,则每个人都必须拥有自己的拥有 ArrayList而不是共享。