2011-01-07 13 views
34

Mi pregunta es ¿cuál es la necesidad de HashSet<T> cuando tenemos SortedSet<T>! Todos los métodos de HashSet están disponibles en SortedSet también, ¡además SortedSet es ventajoso ya que proporciona una colección ya ordenada! Incluso entonces HashSet está presente. ¿Para qué es útil entonces?SortedSet <T> vs HashSet <T>

+4

¿Qué pasa si usted tiene un conjunto de cosas que no tienen un buen orden en el primer lugar? ¿Cómo crearías un * conjunto * ordenado de puntos en tres espacios, por ejemplo? ¿Qué ordenarías? –

+1

en Tuple.Create (x, y, z) :) – Grozz

+1

HashSet si desea que los elementos no se clasifiquen y que sean únicos? Desde MSDN> La clase HashSet proporciona > operaciones de conjunto de alto rendimiento. Un conjunto > es una colección que no contiene > elementos duplicados, y cuyos elementos > no están en un orden particular. http://msdn.microsoft.com/en-us/library/bb359438.aspx – OnesimusUnbound

Respuesta

52

Si no necesita ordenar, no debe usar una clase que clasifique porque significa que su aplicación estará haciendo más trabajo de lo necesario. (En otras palabras, hará que tu aplicación sea más rápida).

+6

Más importante aún, el algoritmo se ejecutará más rápido. Hashing es O (1), mientras que el conjunto ordenado es probable que utilice un árbol de búsqueda binario, que es O (log n) en el caso promedio, un rendimiento mucho peor. –

+0

En ese caso, podemos usar la lista , ¿no es así? ¿Por qué necesita HashSet ? – Batrickparry

+13

El conjunto es para elementos únicos, la lista puede contener entradas duplicadas. http://msdn.microsoft.com/en-us/library/bb359438.aspx para la documentación de HashSet . Dice: Un conjunto es una colección que contiene _nuevos elementos duplicados_ y cuyos elementos no están en un orden particular. – OnesimusUnbound

36

Se trata de elegir la herramienta adecuada para el trabajo. Depende de la forma en que vayas a utilizar tu colección.

This page tiene una bonita tabla que detalla las diferencias entre varias clases de colecciones.

A continuación se muestra un extracto de esa tabla relativa a las colecciones que estás preguntando:

 
Collection Ordering Contiguous Storage? Direct Access? Lookup Efficiency Manipulate Efficiency 
SortedSet Sorted   No    Via Key    Key:O(log n)   O(log n)    
HashSet  Unordered  Yes    Via Key    Key:O(1)    O(1)