何时使用Properties和Java中的Map?

Map和Properties之间的差异,因为它们都具有键值对。

映射用于代码中的正常键值对使用。 属性通常用于存储和加载文件中的配置值。 Properties的底层实现使用Map。

请参阅以下链接,以获取有关如何以及何时使用“属性”的快速教程。

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

PropertiesMap +一些I / O方法的Facade 。

你需要I / O方法吗? 用它:不要。

使用实现Map接口的类,但不是Properties类。 Properties类已损坏。 因为它是一个Hashtable,所以有一些方法可以打破一致的String-to-String映射。 它的不变性很容易被破坏(错误和故意)。 使用其他任何实现Map接口的方法。 如果您的目标是线程安全 – 使用Collections.synchronizedMap(myUnsyncdMap)创建一个。

理想情况下,除了其他答案中提到的一种或两种方法之外,两种类别之间没有区别。 然而,Properties实现实际上是奇怪的 – 从Map接口派生的其他类更安全,提供更好的静态类型并且可能更快(取决于您需要的)。 快速查看实现(特别是它派生的类)应该足以说服你避免它:)

Properties类实现了Map-Interface。 Properties类具有将其内容保存到Stream的方法。

看看: http : //java.sun.com/j2se/1.3/docs/api/java/util/Properties.html

如果您不需要保存内容,请使用像HashMap这样的“普通”Map实现

属性主要用于基础配置数据和本地化,而Map更通用。

Properties对象 Map。 请参阅http://java.sun.com/javase/6/docs/api/java/util/Properties.html 。 即Properties类实现Map接口。

根据文件,

  • 地图是一个界面
  • Properties是一个实现该接口的类

属性IS-A地图,IS-A Hashtable。 它是否应该是一个不同的问题 – 我认为它应该真正得到Map通过组合而不是实现Map接口。

属性类用于属性文件 – 这就是为什么它有读取文件的加载方法。所以如果你正在使用属性文件,例如

 propa = bob propb = jane 

然后使用属性。 否则,您将需要创建自己的Map接口并选择适当的实现,例如HashMap

每个键的默认系统Hashtable不存在的Properties另一个特性。 例如:

 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; 

在父属性中递归搜索默认值。