创建null的arraylist然后将索引设置为对象

时间:2014-12-04 12:37:58

标签: java arraylist indexing iterator listiterator

真的需要帮助,因为患者没有设置替换null。我们必须创建一个包含50个空值的arraylist,因此迭代器会遍历列表,如果找到null,它会将其设置为患者。问题是没有患者被设置为null。我们也必须在最后返还床号。

protected int amountOfBeds = 50;
ArrayList<Patient> bedList = new ArrayList<Patient>(amountOfBeds);    

public int admitPatient(Patient illPatient) {
    int index = -1;
    if(illPatient.getAge() > 0 && amountOfBeds > size()) {
        //if it is null then set to patient 
        //if it not null then we assume its a patient so we skip

        Iterator<Patient> itr = bedList.iterator();
        try{
            while(itr.hasNext()) {

                int bedIndex = bedList.indexOf(itr.next()); 
                if(bedList.get(bedIndex).equals(null)) {
                    bedList.set(bedIndex, illPatient);
                    index = bedIndex +1;
                    break;
                }
            }
        }catch(NullPointerException e) {
            e.getMessage();
        }
    }
    return index;
}

2 个答案:

答案 0 :(得分:2)

创建50个空值列表的简单方法是

    List<Patient> list = Collections.nCopies(50, null);

找到null索引的快速方法就是这个

    int i = list.indexOf(null);

答案 1 :(得分:0)

在Java中,ArrayList基本上是一个数组,可以在执行期间更改其大小。既然你似乎有固定的床,那么阵列可能会更好。

构造函数new ArrayList(50)不会创建包含50个元素的ArrayList。它创建一个空的ArrayList,但给Java提供了#34;提示,可能会在ArrayList中插入50个元素。如果你没有提供这样的提示,那么ArrayList会以很小的空间开始,并且会定期变大,如果它太小则太容纳你要插入的所有项目。这需要时间,所以如果你已经知道要插入的项目数量(即使你只知道它大致),这个构造函数会使你的代码更快。

但是,您必须考虑是否真的需要按照您想要的方式执行此操作。只要有一个空的ArrayList就可以了,你可以根据需要添加或删除元素(没有复杂的逻辑,用一个元素替换null。你可以只是添加if (array.size() >= 50) // it is full, so some special case may be needed here以确保数组中的元素永远不会超出您想要的范围。