Map和Properties都是键值对,它们之间的区别在哪里?
地图通常用于代码中的普通键值对使用。属性通常用于从文件中存储和加载配置值。Properties的底层实现使用Map。
请参阅下面的链接,了解何时以及如何使用Properties的快速教程。
http://docs.oracle.com/javase/tutorial/essential/environment/properties.html
每个键的默认系统 是 Properties 的另一个特性,Hashtable 中没有。例如:
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;
默认值会在父属性中进行递归搜索。
Properties 类实现了 Map 接口。 Properties 类有方法可以将其内容保存到一个流。
请参考:http://java.sun.com/j2se/1.3/docs/api/java/util/Properties.html
如果您不需要保存内容,请使用“普通”Map实现,如 HashMap。
Properties IS-A Map which IS-A Hashtable. 是否应该这样做是一个不同的问题 - 我认为它应该通过组合获得Map,而不是实现Map接口。
Properties类用于Properties文件 - 这就是为什么它有load方法来读取文件。所以如果你正在处理属性文件等。
propa = bob
propb = jane
然后使用Properties。否则,您将需要创建自己的Map接口并选择适当的实现,例如HashMap。
Properties 主要用于基于配置数据和本地化,而 Map 更通用。
一个 Properties 对象 就是 一个 Map。例如参考 http://java.sun.com/javase/6/docs/api/java/util/Properties.html。也就是说,Properties 类实现了 Map 接口。
p0
上的setProperty
调用之前构建p1
的移动,引用与复制语义将变得清晰明了。然而,调用get
而不是getProperty
将绕过Properties
的默认值行为。 - SensorSmith