添加到指定索引时arraylist的行为

时间:2015-11-09 18:56:50

标签: java arraylist

我知道你可以在指定索引处向一个arraylist添加对象,但我想知道放在这些索引之前,之后和之间的索引会发生什么。

我正在实施考试评分系统,我有一个Student getAnswers()方法,可以检索学生在考试中提供的所有答案。我将它存储在arrayList中。

ArrayList<Answer> studentAnswers = new ArrayList<Answer>();

现在每个答案都知道它对应的问题编号,所以在这个arraylist中我想将答案添加到questionNumber指定的索引中。

for(Answer s: getAnswers()){
studentAnswer.set(s.getQuestionNumber(), s);
}

我的问题是,如果学生没有回答其中一个问题,我希望它是一个空答案。我不知道这是否是处理这个问题的正确方法。 一个例子是:

StudentAnswer [question 1, "Foo"]
StudentAnswer [question 2, "Class"]
StudentAnswer [question 4, "Object"]

如果答案密钥是["Foo", "Class", "Interface", "Object"]

studentAnswers列表应如下所示:["Foo", "Class", Null, "Object"]

空虚,因为他没有回答问题3.

我不知道这是否是处理这个问题的正确方法。

1 个答案:

答案 0 :(得分:0)

我觉得数组而不是ArrayList更适合这个问题,因为你需要用你的问题数来初始化数组的大小。

import java.util.Arrays;

class StudentAnswer {
    private int id;
    private String value;

    public StudentAnswer(int id, String ans) {
        this.id = id;
        this.value = ans;
    }

    public int getQuestionNumber() {
        return this.id;
    }

    public String toString() {
        return this.value;
    }
}

class Main {
  public static void main(String[] args) {
    StudentAnswer a0 = new StudentAnswer(0, "Foo");
    StudentAnswer a1 = new StudentAnswer(1, "Class");
    StudentAnswer a3 = new StudentAnswer(3, "Object");

    int totalQuestions = 4;
    StudentAnswer[] answers = new StudentAnswer[totalQuestions];
    answers[a0.getQuestionNumber()] = a0;
    answers[a1.getQuestionNumber()] = a1;
    answers[a3.getQuestionNumber()] = a3;

    System.out.println(Arrays.asList(answers));
  }
}

输出

[Foo, Class, null, Object]

注意:除非您修改toString中的StudentAnswer方法,否则引号不会显示在字符串上。