Learning when to use custom data structures
Ruby only offers two main core data structures for collections, arrays, and hashes. However, Ruby arrays and hashes are not simple arrays or hash tables; they are complex internally. Ruby takes care of most of the performance issues when dealing with arrays and hashes. For example, when adding an element to an array when the array does not have any room internally, Ruby expands the array not by a single element, but in relation to how large the array currently is, so that if you keep adding elements to the array, it doesn't need to resize the array each time. Likewise, for small hash tables, Ruby may store the hash table as a simple list if it thinks it will be faster to scan the list than use a real hash table. If the hash table grows, Ruby will internally convert the list into a real hash table, at the point at which it roughly determines that it will be faster to use a separate hash lookup.
In a lower-level language such as C,...