2010-06-04 11 views

Respuesta

13

Un mapa está destinado para el uso de par clave-valor normal en el código. Las propiedades se usan generalmente para almacenar y cargar valores de configuración de un archivo. La implementación subyacente de un Propiedades utiliza un Mapa.

Consulte el siguiente enlace para obtener un tutorial rápido sobre cómo y cuándo usar las Propiedades.

http://docs.oracle.com/javase/tutorial/essential/environment/properties.html

0

Propiedades se utiliza principalmente para los datos de configuración basada y localización, mientras Mapa es más general de uso.

0

De acuerdo con la documentación,

  • Map es una interfaz
  • Properties es una clase que implementa la interfaz
0

propiedades es-A mapa que IS-una tabla hash. Si debería ser o no es una pregunta diferente, creo que realmente debería obtener el mapa a través de la composición y no implementar la interfaz del mapa.

La clase de propiedades es para archivos de propiedades; es por eso que tiene métodos de carga para leer el archivo. Por lo tanto, si está trabajando con archivos de propiedades, p.

propa = bob 
propb = jane 

luego use Propiedades. De lo contrario, querrás crear tu propia interfaz de Mapa y elegir una implementación adecuada, p. HashMap

+3

Retificación: Propiedades IS-A Hashtable que IS-A Map. – BalusC

2

Utilice una clase que está implementando la interfaz de Mapa, pero no es la clase Propiedades. La clase de Propiedades está rota. Dado que se trata de una Hashtable debajo, existen métodos que romperían el mapeo String-to-String por lo demás consistente. Su invariante se rompe muy fácilmente (tanto por error como a propósito). Use cualquier otra cosa implementando la interfaz de Mapa. Si busca la seguridad de subprocesos: use Collections.synchronizedMap (myUnsyncdMap) para crear uno.

Lo ideal es que no haya diferencia entre las dos clases que no sean uno o dos métodos mencionados en las otras respuestas. Sin embargo, la implementación de Propiedades es realmente extraña: otras clases, derivadas de la interfaz de Map, son mucho más seguras, proporcionan una mejor tipificación estadística y son probablemente más rápidas (dependiendo de lo que necesites). Echando un vistazo rápido a la aplicación (en concreto, que la clase se deriva de) debería ser suficiente para convencer a evitarlo :)

12

Properties es una Facade para Map<String,String> + algunos métodos de E/S.

¿Necesita los métodos de E/S? Úselo: no.

0

A por sistema predeterminado de clave es otra característica de Properties no presente en Hashtable es. Por ejemplo:

Properties p0 = new Properties(); 
p0.setProperty("a", "0"); 
p0.setProperty("b", "1"); 
Properties p1 = new Properties(p0); 
p1.setProperty("a", "10"); 
assert p1.getProperty("a").equals("10"); 
assert p1.getProperty("b").equals("1"); 
assert p1.getProperty("c") == null; 

Los valores predeterminados se buscan recursivamente en las propiedades principales.

Cuestiones relacionadas