Nuevamente hace un rato que no escribía, ya se me había incluso quitado la costumbre, sobre todo porque el público objetivo del tutorial no lo leyó nunca ¬¬, pero bueno, mejor volver a la modalidad ecléctica donde escribo lo que se me ocurre y no me preocupo de mucho más, es más sano, que sea solo una catarsis  y una forma de dejar registro de las cosas que sean interesantes e importantes para mí. Luego del preámbulo aburrido y culposo clásico de cada periodo sin escribir ataquemos el punto, estructuras de datos.

Últimamente he estado leyendo el libre Algorithms, de Robert Sedgewick y Kevin Wayne, para refrescar conocimientos y repasar las materias ya añejadas en el inconsciente (esas cosas que siempre usas de una u otra forma pero no recuerdas al pie de la letra) y en la parte de las estructuras de datos me encontré con una que no conocía, así que para que no se me olvide la voy a escribir por acá, les presento el tipo de dato Bag (bolsa o bolsón sería en español).

Bag es un tipo de dato de colecciones de ítems cuya particularidad es que no soporta la eliminación de elementos, se puede instanciar un nuevo Bag, tiene un método para añadir un ítem al Bag, un método que pregunta si está vacío, uno que entrega el tamaño, y la posibilidad de iterar sobre todos los ítems, solo eso, no está ordenado, no deben los objetos ser iguales, no exige nada de eso. Por lo que una interfaz para este tipo de dato sería como la siguiente:

Este tipo de dato es muy útil para impedir que se eliminen ítems, ya que no implementa esta función y que no importe el orden en el cual se guardan los ítems en la estructura de datos. Un ejemplo de utilización puede ser por ejemplo cuando se quieren sacar datos estadísticos de un conjunto, con el conjunto definido no se quiere que se eliminen datos de este porque modifica los cálculos de la estadística y el orden en que ingresa no es importante ya que lo interesante es el resultado estadístico.

Eso, interesante, un tanto específico pero muy útil bien implementado.