Remove Element From an Array

Started by
3 comments, last by !Null 11 years, 7 months ago
I'm trying to figure out how I can remove an element from a normal array (not ArrayList) in Java. I tried by just setting the array at the particular index to null, but that's apparently not what he wanted.

My only other guess is maybe try to create a new array, use arraycopy from starting at 0 until one less than the element being removed, and then then copying the same array from one element after the one being used to the end of the array you just created.

Then reference the old array to the new array and end the method.

Any thoughts?
Advertisement
Does order need to be conserved in the array? Because if not, you can simply swap the element to delete with the last element in the array, and cut the last element off (by resizing the array or doing an arraycopy on a new array). This is really efficient but if your array was sorted for instance it will no longer be.

If the order has to be preserved, you want to set the element to delete to null, and bring every element after that down a notch, and then resize the array by one less element (or again, just arraycopy, which is more efficient at this point since block memory copy is faster than walking through the array, but if you have a lot of elements to delete or if you need to go through the array to find which ones to delete, you may be better off sweeping through the array backwards and pushing everything down as needed).

So if you need to delete element at position P in an array of N elements, you would create a new array of N - 1 elements, and:
- arraycopy the first P - 1 elements of the old array into the beginning of the new array
- arraycopy the elements from index P + 1 to N - 1 of the old array into the new array at index P
(assuming zero-based indices)

“If I understand the standard right it is legal and safe to do this but the resulting value could be anything.”

It also sounds like you want to do things that arrays are not very good at. Have a look at the List interface and some of the implementations. LinkedList or ArrayList could be just what you are looking for. Both support the immensely popular remove(int index) method.
Is there a reason to just do it with an array instead of a Collection class?

Since the array has a length property, setting an element to null doesn't resize the array.
The only way to shrink the array is to create a new one of the smaller size and copy
the data.

If you are using the array to store the data, but you have the data array hidden in a class,
then you could use null, keep track of the size yourself, and re-arrange stuff yourself.

I think, therefore I am. I think? - "George Carlin"
My Website: Indie Game Programming

My Twitter: https://twitter.com/indieprogram

My Book: http://amzn.com/1305076532

if you want arrays of Changing sizes, then a fixed array just isn't going to cut it.

if you needing to cut out elements in unpredictable places and then shrink the size.
consider linked lists.

with linked lists you can remove and element and then change the link to the next element:

<el1> -> <el2> -> <el3> -> <el4> -> <el5>

<el1 -> <el2> -> <el4> -> <el5>

That is a pretty vague example but you get what I mean. figure out what exactly the person you are doing this for wants exactly.
/********************************************************************************\
/**********************He Who Dares, Wins**********************************\
/********************************************************************************\

This topic is closed to new replies.

Advertisement