何时使用Properties并在Java中使用Map?

时间:2010-06-04 19:24:20

标签: java

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

9 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:12)

对于Properties +一些I / O方法,

Map<String,String>Facade

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

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

如果您不需要保存内容,请使用“正常”地图实施,例如HashMap

答案 4 :(得分:0)

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

答案 5 :(得分:0)

属性对象地图。请参阅示例http://java.sun.com/javase/6/docs/api/java/util/Properties.html。即Properties类实现了Map接口。

答案 6 :(得分:0)

根据文件,

答案 7 :(得分:0)

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

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

propa = bob
propb = jane

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

答案 8 :(得分:0)

每个键默认系统Properties中不存在的Hashtable的另一个功能。 E.g:

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;

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