2011-11-22 20 views
15

Cuando intenté utilizar la clase tabla hash, Netbeans me dio un error diciendo:reemplazo para la clase Hashtable obsoleta en Java

Aunque todavía apoyado, estas clases se hicieron obsoletos por las clases de colección JDK 1.2, y probablemente no debería ser utilizado en el nuevo desarrollo.

Sin embargo, me parece que no puede encontrar un ejemplo en línea en un mejor reemplazo para Hashtable. ¿Alguna sugerencia?

+0

En general, debe usar un HashMap. – user949300

Respuesta

31

El reemplazo más directo de un Hashtable es un HashMap.

En diferencia de que podría ser importante es que se sincronizan todos los métodos pertinentes de Hashtable mientras están no sincronizada en HashMap.

+2

Si necesita la sincronización (proporcionada por Hashtable), puede usar ['Collections.synchronizedMap()'] (http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html #synchronizedMap (java.util.Map)) para decorar un 'HashMap' normal o usar [' ConcurrentHashMap'] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap .html) que permite la lectura simultánea y la modificación sin requerir bloqueo. –

+0

Pero no podrá reemplazar una Hashtable por una HashMap si tiene una biblioteca de tercer nivel que necesita un HashMap o un Diccionario (super tipo de HashMap) como el de org.osgi.framework.BundleContext.registerService (String string, Object o, Dictionary dctnr) one. – javadev

3

Probablemente se podría utilizar Hashmap:

Map<String, Integer> mymap = new HashMap<String, Integer>(); 
6

Un mejor sustituto para Hashtable es HashMap.

En cuanto a ser obsoletos, que no tienen ninguna referencia a ella, pero los estados Javadoc:

A partir de Java 2 v1.2 plataforma, esta clase fue reforzado a implementar la interfaz Map, por lo que es un miembro de la Java Collections Framework.

Hashtable está sincronizado a diferencia HashMap.

4

que puedes usar HashMap, pero no está diseñado para entornos concurrentes, donde se puede utilizar ConcurrentHashMap.

O

Map<K,V> myMap = Collections.synchronizedMap(/*any map instance*/); 
3

hay casos en que un método fuera de su control requiere un Hashtable. Java propio javax.management.ObjectName es un ejemplo [1].

Cuando la interfaz externa requiere que se tienen que utilizar Hashtable. en NetBeans, puede utilizar:

@SupresssWarnings("UseOfObsoleteCollectionType") 

suprimir la advertencia localmente.

Ver

1: Me pregunto por qué utilizaron Hashtable y no HashMap, ya ObjectName es disponibles desde 1.5 y Hashtable es obsoleto desde la versión 1.2

0
  • Para normal (es decir acceso no concurrente) - use HashMap (generalmente a través de la interfaz de Mapa).
  • Si necesita un simple envoltorio de sincronización para un mapa existente - El uso Collections.synchronizedMap (...)
  • Si necesita una clase diseñada con cuidado y de manera óptima para el acceso simultáneo - ConcurrentHashMap utilizar (por lo general a través de la interfaz que se extiende ConcurrentMap la interfaz de Mapa con características de simultaneidad adicionales).
Cuestiones relacionadas