Tengo un Hashtable
que tiene una clave de String
y el valor como String
, pero he llegado a un punto en mi proyecto en el que necesito poder almacenar varios tipos de datos diferentes. Por ejemplo, voy a necesitar almacenar int
, String
, Date
, etc., todo en uno Hashtable
.¿Hay alguna manera de almacenar múltiples tipos de datos en una única variable hashtable?
Respuesta
HashTable
o cualquier colección Map
puede manejar esto, a excepción de int
y otros tipos primitivos: no se puede almacenar tipos primitivos, sólo Object
referencias. int
tendrá que ser envuelto como un objeto Integer
.
Entonces, ¿podré recuperarlo como el tipo de datos que se almacenó? – samwell
No realmente, no, no sin un elenco, y todavía será meticuloso.Estarías mucho mejor usando diferentes mapas para diferentes tipos, o mejor aún, simplemente creando una clase con campos con cada uno de los diferentes nombres, en lugar de tener un 'Mapa' en el que esperas que te asegures de que todo esté bien. del tipo correcto. –
Puede hacer que almacene el tipo de datos generales Object
, aunque eso no permitirá tipos de datos primitivos.
Cambie su HashTable a Hashtable<String, Object>
y cuando desee almacenar un int
, primero debe convertirlo (o usar autocast) a Integer
. Después de obtener su valor de la tabla, puede determinar su tipo por if(value instanceof String)
, y así sucesivamente para cualquier tipo.
No hay necesidad de encasillar - el autoboxing lo hará automáticamente (Java 5+). – 01es
La clase se llama Hashtable y toma dos parámetros de tipo, no uno. –
Map<String, Object> map = new HashMap<String, Object>()
Esto le da un mapa con las teclas de tipo String y los valores de Tipo del objeto, lo que básicamente significa cualquier descendiente de tipo Object (Fecha, entero, cadena, etc.). Otras respuestas señalan correctamente al hecho de que en lugar de utilizar los primitivos como int, boolean que es necesario para utilizar sus homólogos de enteros, booleanos, etc.
El tipo de retorno de get
operación en tal mapa es Object
. Por lo tanto, es responsabilidad del desarrollador manejar la información de tipo correctamente.
Se proporciona una buena respuesta a la pregunta sobre cuál es la diferencia entre Hashtable y HashMap here.
Si bien esto es posible, generalmente no es una buena idea. En la mayoría de los casos, esto conduce a excepciones y problemas de conversión de tipo.
La tabla HashTable se puede configurar para almacenar objetos genéricos en lugar de tipos de clase específicos; sin embargo, la conversión de tipo al recuperarlos no ocurre automáticamente.
Para volver a sacar el objeto de la colección, se deberá desarrollar alguna forma de rutinas de verificación de tipos.
Será mejor que cree una colección separada para cada tipo de clase que desee almacenar.
PD: También recomendaría usar un HashMap en lugar de HashTable. HashTable ha quedado obsoleto.
Gracias, no lo sabía. – samwell
- 1. ¿Hay alguna manera de aplicar una columna única usando doctrine2?
- 2. ¿Hay alguna manera de declarar una variable que implementa múltiples interfaces en .Net?
- 3. Oracle: ¿Hay alguna manera de obtener los tipos de datos de columna para una vista?
- 4. ¿Hay alguna manera de probar una variable para "isForEachable"
- 5. ¿Hay alguna manera de ver cuánta memoria usa una variable?
- 6. ¿Hay alguna manera de implementar tipos algebraicos en Java?
- 7. ¿Hay alguna manera de almacenar de forma segura los datos de usuario en un dispositivo Android?
- 8. tipos de datos múltiples matriz en PostgreSQL
- 9. ¿Hay alguna manera de seleccionar múltiples tipos de campos de entrada con CSS?
- 10. ¿Hay alguna manera de efectuar tipos de datos definidos por el usuario en MySQL?
- 11. ¿Hay alguna manera de concaturar los tipos anónimos de C#?
- 12. ¿Hay alguna manera de resaltar búsquedas múltiples en (g) Vim?
- 13. ¿Hay alguna manera de agregar múltiples receptores en Python SMTPlib?
- 14. Hashtable de variable mutable en Ocaml
- 15. ¿Cómo almacenar diferentes tipos de datos en una lista? (C++)
- 16. ¿Hay alguna manera de recuperar datos de sensores múltiples en Android?
- 17. ¿Cómo almacenar una HashTable en la configuración de usuario?
- 18. ¿Hay alguna manera de lograr el enlace de datos múltiples para un solo elemento en KnockoutJS?
- 19. ¿Hay alguna manera de forzar a un MSI "aleatorio" a realizar una única instalación de usuario?
- 20. ¿Hay alguna manera de obtener el tamaño de una variable de PHP en bytes?
- 21. ¿Hay alguna manera en SQL Server de identificar de forma exclusiva una base de datos?
- 22. ¿Hay alguna manera de recorrer una estructura con elementos de diferentes tipos en C?
- 23. ¿Hay alguna manera de desactivar una etiqueta?
- 24. ¿Hay alguna manera de pausar una CABasicAnimation?
- 25. ¿Hay alguna manera de "limpiar" una superficie?
- 26. Mejor manera de almacenar datos en caché
- 27. ¿Es Hashtable apropiado para almacenar activos?
- 28. ¿Hay alguna manera de verificar si una variable es una fecha en JavaScript?
- 29. ¿Hay alguna manera de crear una matriz con una longitud variable en c?
- 30. ¿Hay alguna manera de implementar restricciones en las clases de tipos de Haskell?
Cambia la clave a 'Objeto'? – Mysticial
¿No es una buena opción crear un objeto con get/set y agregar ese objeto HashTable/ArrayList (o) cualquiera que sea la colección que le interese? Si agrega varios tipos de datos, mientras recupera si no conoce el índice exacto y el tipo de datos, terminará con classcastexception. – kosa
Esto suena como una estructura de datos muy frágil. ¿Podría describir qué es lo que está tratando de lograr en general, por lo que tal vez alguien pueda sugerir una forma de estructurar mejor sus datos? – Bobulous