Re: Not preserving order in chained list of hash table Any consequences
- From: Sven Neumann <sven gimp org>
- To: Ariel Burbaickij mni fh-giessen de
- Cc: gtk-list gnome org
- Subject: Re: Not preserving order in chained list of hash table Any consequences
- Date: 21 Jun 2002 16:47:18 +0200
Hi,
Ariel Burbaickij mni fh-giessen de writes:
> As I see from following code excerpt from g_hash_table_resize():
>
> for (i = 0; i < hash_table->size; i++)
> for (node = hash_table->nodes[i]; node; node = next)
> {
> next = node->next;
>
> hash_val = (* hash_table->hash_func) (node->key) % new_size;
>
> node->next = new_nodes[hash_val];
> new_nodes[hash_val] = node;
> }
> order of entries in the appropriate chained list is not preserved while
> resizing the table. All entries in the list are linked to the head of the list
> one after another. So one can even say that the chained list is reversed.
>
> My questions:
> 1) Am I right with my view of the matter ?
> If the first question is answered with "yes"
> 1a) Can violation of order lead to some unpleasant consequencies
> for application programmer supposing some particular order of elements
> in chained list?
> 1b) Should probably the notice be made in source code that the order is not
> preserved?
I think you are right but a hash table by definition doesn't allow the
developer to make any assumptions about the order of elements. Or, in
other words, the order of elements in a hash table is absolutely
undeterministic. Any code that assumes anything about the order of
elements is broken.
Salut, Sven
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]