T
Every thing is a thingFirst of all, it is important to understand that each type of data structure has a more specific application. So say that ♪ are faster than chained lists is to compare oranges with bananas.A "table" is quite efficient to recover an element contained in it from a Key key. That means it's quick to find a needle in the haystack if you have a shape (hash) identify the needle.However, going through a whole table is generally less efficient than going through an entire list.In addition, only a vector-based list allows you to access random elements efficiently.HashesThese are numerical values calculated by a function from an original value of arbitrary size. There are several algorithms hash, being the best are the ones that emit as few as possible ♪ repeated.For example, the class String Java has the following method to generate hash code:public int More ...hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
The documentation of the method states that hash is calculated as follows:s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
Where:s[i]: i- String's character.m: String size, in charactersIn short, generate one hash is like generating a numeric ID for the object. In Java, any object can have its own implementation hashCode. This implementation should consider all the attributes that identify the object. It is important that different objects have ♪ different, as much as possible.Tables HashesThe number generated by a function hash can be used to easily locate an object in a kind of "table".Internally, in Java for example, this table is a vector. Each position of the vector is assigned a number range. It's like slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots of a shelf.Holding valuesSupposing we created a Hashtable and the internal vector has 10 positions (slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots). Suppose we add objects and report key values hash range from 1 to 100. Thus, ♪ that return values from 1 to 10 will be placed in the first Slot, those that return values from 11 to 20 in the second Slot and so on.If we add an object (1) hash of the key be 20 it will be placed on the second Slot. If we add another object (2) with key hash 45 he will be placed fifth Slot. If we add another object (3) with key hash 15, he will also be placing on the second Slot. We would have the following data structure:Slot 1:
Slot 2: Objeto 1, Objeto 3
Slot 3:
Slot 4:
Slot 5: Objeto 2
Slot 6:
Slot 7:
Slot 8:
Slot 9:
Slot 10:
Note that each item in the table is also a type of vector. In Java, in class Hashtable, this is implemented through a linked list of type objects Entry (input).Recovering valuesThen, to recover an object, just pass the key to the table, this will calculate the hash and go directly to Slot to recover the item.Continuing the example above, if I wanted to recover Object 3, I would have to pass the key of it. The table would calculate hash code of the key, which would return the value 15. Hashes always return the same value to the same key. So with a simple account I know the item will be found in the second Slot. However, as we still have a list of objects, the table will have to go through the list of entries of the Slot 2 and check, one by one, which is really the Object 3.ImplicationsThe above explanations have several implications:If there is a lot of collision ♪, many objects will end up falling into few slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots. having a bad distribution, every time it is necessary to recover an item the efficiency will be bad, as it will be necessary to go through the list of elements of Slot and compare one to one.The inner size of the table needs to be well calculated, so that there are not many items in each Slot, not many slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots empty. In the implementation of Java, when the slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots start getting full Hashtable increases the number of slots and makes a redistribution.In Java, the method that generates hash can be called several times, so it is important to take care of performance and do cache of value when possible.Depending on the implementation of hash table, including many items repeatedly can be well inefficient as there will be repeated breaks to add new slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots and redistribute the elements.Different types of implementationsA large part of what was described above is only one of the possible types of implementation of use of ♪ to recover values.For example, in Java, there is TreeMap, a "table" whose ♪ of the entries are not stored in a vector, but in a binary tree. There are several implications on that. Depending on the balancing of the tree can be more or less efficient to recover elements. Comparing a balanced tree with an implementation of vectors slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots slots full the tree would win. But I've already done some implementations that needed to carry large trees in memory and the TreeMap was much more efficient.