在Java

时间:2016-04-21 19:49:41

标签: java arrays

到目前为止,我一直在使用ArrayLists。我曾经使用过Arrays,但它的使用方式与我现在的假设不同。我目前有一个名为Member的类,它看起来像这样:

public class Member
{
    private String firstName;
    private String lastName;
    private int monthJoined;
    private int yearJoined;
}

当然这个类下面有accessor / mutator方法和构造函数。

现在我必须创建一个名为 Club 的类,它可以容纳存储在Member []数组中的固定数量的成员。 (固定数字可以是任意数字)所以在这一点上我想知道变量会是什么样子。此类还需要一个标题为 public void join(成员成员)的方法,该方法会向俱乐部添加成员,新成员将被添加到数组中的第一个空索引。

我知道如何使用ArrayList但不能使用数组。所以鉴于课程分会,变量和方法是什么样的?

1 个答案:

答案 0 :(得分:0)

ArrayList更好地完成工作时,我强烈反对您不使用数组。通常,在Java中,集合(例如ArrayList)优先于数组,除非某些特定情况另有规定。

数组的主要缺点是它们的大小必须在初始化时固定,并且只要对数组的引用仍然可用,它就会保持不变。因此,如果您的Club在未来5年内可能包含1000个成员,则您需要立即为这些1000成员分配。当第1001个成员加入时,您必须分配一个新的和改进的数组,复制所有现有成员,然后使用新数组。这个和更多是由ArrayList透明地完成的。

话虽如此,使用数组本身应该很简单:

class Club {
    //thread unsafe 
    private Member[] members;
    private int nCurrentMembers = 0;

    Club(int initialCapacity) {
        //validate initialCapacity
        members = new Member[initialCapacity];
    }

    public boolean join(Member m) {
        //validate m
        if (nCurrentMembers == members.length) {
            members = Arrays.copyOf(members, members.length + 100);
        }
        members[nCurrentMembers++] = m;
        return true;
    }
    public boolean leave(Member m) {
        // homework :-)
        return true;
    }
}