Charlieglider
Charlieglider

Reputation: 85

Remove items from custom arraylist implemetation without .remove

I'm working on a custom ArrayList implementation and I have one method where I'm trying to remove an item per conditions from an array such as E[] elements. The array is initialized by doing something like this:

String[] contents = {"chicken", "hippo", "goat"};
ArrayI<String> newarray = new ArrayI(contents);
newarray.chooser(new LongChooser());

It should remove words length 4 or less and return an array like this:

["chicken", "hippo"]

I'm trying not to use any built in methods, like remove(), clone(), arraycopy(), etc. I can't seem to get this to work, I've tried creating a duplicate array and trying to copy elements over like this:

E[] copy = (E[]) (new Object[this.size-1]);
for (int i = 0; i < size; i++) {
    if (shorter) {
        copy[i] = elements[i];
    }
    else {
        for (int j = i; j<this.size-1; j++) {
            elements[j] = elements[j+1];
        }
        elements[size-1] = null;
        size -= 1;
    }
    for (int i =0; i< copy.length; i++) {
        elements[i] = copy[i];
    }
    size -= 1;

I know this is not the correct way because they aren't the same size array and just returns [longword, longerword, null]. Also I'm pretty sure I should be using the size variable, but it doesn't seem to do much.

How do I get this to work? Thanks.

Upvotes: 0

Views: 40

Answers (1)

Abra
Abra

Reputation: 20913

  1. Create an array to hold the [filtered] results. Its initial size is zero.
  2. Iterate through contents.
  3. If the current element of contents needs to be retained, then
    • create a temporary array whose length is one greater than the array that holds the results.
    • copy the results array to the temporary array
    • set the last element of the temporary array to the current element of contents
    • assign the temporary array to the results array

Here is the code, using only simple arrays. I presume you can adapt it to your needs. Note that the last line is simply to check the value of newContents. It is not required.

String[] contents = {"chicken", "hippo", "goat"};
String[] newContents = new String[0];
for (String str : contents) {
    if (str.length() > 4) {
        String[] temp = new String[newContents.length + 1];
        for (int i = 0; i < newContents.length; i++) {
            temp[i] = newContents[i];
        }
        temp[newContents.length] = str;
        newContents = temp;
    }
}
System.out.println(Arrays.toString(newContents));

Upvotes: 1

Related Questions