Assuming I want to store n points with integer (x,y) coordinates. I can use a 2-d (2Xn) array or use a list / collection / or an array of n objects where each object has 2 integer fields to store the coordinates.
As far as I know is the 2d array option is faster and consumes less memory, but I don’t know why? Detailed explanation or links with details are appreciated.
Assuming I want to store n points with integer (x,y) coordinates. I can use
Share
This is a very broad question, and kinda has many parts to it. First off, this is relative to the language you are working in. Lets take Java as an example.
When you create an object, it inherits from the main object class. When the object is created, the overhead comes from the fact that the user defined class inherits from
Object. The compiler has to virtualize certain method calls in memory so that when you call.equals()or.toString(), the program knows which one to call (that is, your classes’.equals()orObject‘s.equals()). This is accomplished with a lookup table and determined at runtime with pointers.This is called virtualization. Now, in java, an array is actually an object, so you really don’t gain much from an array of arrays. In fact, you might do better using your own class, since you can limit the metadata associated with it. Arrays in java store information on their length.
However, many of the collections DO have overhead associated with them.
ArrayListfor example will resize itself and stores metadata about itself in memory, that you might not need.LinkedListhas references to other nodes, which is overhead to its actual data.Now, what I said is only true about Java. In other OO languages, objects behave differently on the insides, and some may be more/less efficient.
In a language such as C++, when you allocate an array, you are really just getting a chunck of memory and it is up to you what you want to do with it. In that sense, it might be better. C++ has similar overhead with its objects if you use overriding (keyword
virtual) as it will create these virtual lookups in memory.