Map和Properties之间的差异,因为它们都具有键值对。
答案 0 :(得分:13)
映射用于代码中的正常键值对使用。属性通常用于存储和加载文件中的配置值。 Properties的底层实现使用Map。
请参阅以下链接,以获取有关如何以及何时使用“属性”的快速教程。
http://docs.oracle.com/javase/tutorial/essential/environment/properties.html
答案 1 :(得分:12)
答案 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;
在父属性中递归搜索默认值。