I have made and used them in the well, 8 years of scripting and programming I have done.

The furthest I have gone is records in Delphi and they do a great job.

I am using record arrays and merely skipping records in the array that do not have an index > 0 (in other words they are not loaded with anything or not being used).

I also use a repeat rather than for loop with the array so if their is a collision (this is just a basic floor collision) it exits the repeat statement by incrementing the loop variable (if I have a floor collision, there is no point in testing or even checking the existance of any others).