Creating an arraylist of nulls and then setting the index to an object

904 Views Asked by At

Really need help with this as a Patient is not getting set to replace the null. We have to create an arraylist of 50 nulls so the iterator goes through the list and if it finds a null it will set it to the patient. The problem is no patients are getting set to the null. We have to return the bed number at the end too.

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

There are 2 best solutions below

0
On

In Java, an ArrayList is basically an array, that can change its size during execution time. Since you seem to have a fixed amound of beds, an array would probably be better here.

The constructor new ArrayList(50) doesn't create an ArrayList with 50 elements. It creates an empty ArrayList, but gives Java the "hint, that there will probably be inserted 50 elements into the ArrayList. If you don't give such a hint, the ArrayList starts with little space and is periodically made bigger, if it gets too small too accomodate all items you want to insert. This takes time, so if you already know how many items you will insert (even if you only know it approximately) this constructor makes your code faster.

However, you have to think if you really need to do this the way you just wanted to do. Whouldn't it be easier, to just have an empty ArrayList, to which you can add or delete elements just as you want to (without a complicated logic, which replaces null with an element. You could then just add if (array.size() >= 50) // it is full, so some special case may be needed here to make sure there are never more elements in the array than you want.

0
On

Simple way to create 50 nulls list is this

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

quick way to find index of null is this

    int i = list.indexOf(null);