例如,是它总体上是好的有如下的结构:在java中使用映射作为值的映射是“好”吗?
Map <Object, Map>
在我的情况,乍一看我做需要某种结构,将有例如映射String -> Map<...>
, 或这很奇怪,我应该以其他方式解决问题?
例如,是它总体上是好的有如下的结构:在java中使用映射作为值的映射是“好”吗?
Map <Object, Map>
在我的情况,乍一看我做需要某种结构,将有例如映射String -> Map<...>
, 或这很奇怪,我应该以其他方式解决问题?
以这种方式设计数据结构本身并不好。这也不一定是坏事。
如果您要查找地图对象,我会考虑使用HashMap
来提高执行时间。
来自@Rafael Osipov,在涉及并发性的情况下,考虑使用ConcurrentHashMap
来实现数据完整性。
这个'HashMap'提示是什么?这完全不相关,可能“不好”...... – Marco13
其实HashMap是一个Map的非标准实现。在实践项目中,你几乎看不到别的东西。是的,问题不是关于它的 –
如果实现涉及并发性,请考虑在HashMap上使用'ConcurrentHashMap'来获得性能增益。 – 2016-04-21 12:59:51
将地图作为地图中的值没有什么不对。这是使用多个键快速查找的一种相当常见的方式。
例如,你存储大量的Student
记录:
class Student
private String name;
private int age;
private School school;
}
您可以将这些存储在List<Student>
,但如果你想找到,比如,所有的学生在一定的学校谁16岁老它可能是更好的能说:
Map<School,Map<Integer,List<Student>>> index;
List<Student> subset = index.get(School.STATE_HIGH).get(16);
注意,有诸如具有独立的复合键类型(在我上面的例子,代表学校和年龄一起)做同样的事情的其他方式。另外请记住,如果您使用地图的主要目的是效率,那么在很多情况下,您可能会过早地进行优化。除非地图存储了数百万个值,否则你将每秒访问它们几千次,那么你可能需要考虑一个简单的列表,你可以通过它来搜索。
它有几个代码味道对我来说。
Map
没有指定通用类型。object
,不是强类型。所以我宁愿看到:
Map<CompositeKey, ValueType>
哪里CompositeKey
是由第一和第二项的正确实施的平等一类。和ValueType
不是Map
。
因此,例如,代替嵌套地图:
A -> { 1 -> "ABC",
2 -> "DEF"},
B -> { 1 -> "abc",
3 -> "def"}
你有一个平坦的地图和一个复合键:
(A,1) -> "ABC",
(A,2) -> "DEF",
(B,1) -> "abc",
(B,3) -> "def",
取决于你的用例。它不一定是错的。 – khelwood
任何地方都可以使用[原始类型](https://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html)。至少,使它成为'Map
我不问行类型,而是关于有一个地图作为价值。 使用案例:我有一些开关,例如JComboBox,我需要一个单独的地图关联到列表中的每个对象,所以如果我选择一些相应的地图将被使用。 –