Contiene en TreeSet frente a otro conjunto

Is the contains method on TreeSet (Since it is already sorted per default) faster than say HashSet?

The reason I ask is that Collections.binarySearch is quite fast if the List is sorted, so I am thinking that maybe the contains method for TreeSet might be the same.

preguntado el 03 de mayo de 12 a las 11:05

1 Respuestas

Desde el javadoc de ÁrbolConjunto:

Esta implementación proporciona un costo de tiempo log (n) garantizado para las operaciones básicas (agregar, eliminar y contiene).

Desde el javadoc de HashSet:

Esta clase ofrece un rendimiento de tiempo constante para las operaciones básicas (agregar, eliminar, contener y dimensionar), suponiendo que la función hash dispersa los elementos correctamente entre los cubos.

Por tanto, la respuesta es no.

Looking at the implementation (JDK 1.7 oracle), treeset.contains (resp. hashtree) relies on treemap.containsKey (resp. hashmap) method. containsKey loops over one hash bucket in hashmap (which possibly contains only one item), whereas it loops over the whole map, moving from node to node in treemap, using the compareTo method. If your item is the largest or the smallest, this can take significantly more time.

Finally, I just ran a quick test (yes I know, not very reliable) with a tree containing 1m integers and looking for one of the 2 largest, which forces the treeset to browse the whole set. HashSet is quicker by a factor of 50.

contestado el 03 de mayo de 12 a las 12:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.