【发布时间】:2014-05-03 18:12:01
【问题描述】:
我有两个班级Foo 和Bar。
class Foo
{
Set<Integer> bars; // Foo objects have collection of bars.
Set<Integer> adjacents; // Adjacency list of Foos.
}
class Bar
{
int foo; // ID of foo of which this object belongs to
Ipsum ipsum; // This an arbitrary class. But it must be present
Map<Integer, Float> adjacents; // Adjacency list of Bars
}
Bars 的数量是预定义的(最多 1000 个)。因此,我可以使用一个数组。
但是Foos 的数量是未定义的(最多#ofBars/4)。
当您考虑添加、删除和get() 时,我需要速度更快且占用空间更少的那个(因为我要使用序列化)。
这是我的选择(据我所知)
选项 1:不要为 Foo 定义类。相反,使用List<Set<Integer>> foo; 和另一个映射 Map> fooAdjacencies;
选项 2: 如果我想获得i 的条形图,请使用Map<Integer, Set<Integer> foo,我只需写foo.get(i)。选项 3: 不要定义类。相反,使用选项 2 和 Bar 类:
Map<Integer, Ipsum> bar;
Map<Integer, Map<Integer, Floar>> barAdjacencies;
在空间和时间效率方面我应该选择哪个选项?
【问题讨论】:
-
@LuiggiMendoza 感谢您的通知。我更正了。
-
地图与列表根本不同。你需要什么行为?
-
我需要我的结构在添加、删除和查找元素时高效。没有其他行为。
-
参考。 ArrayList/List , HashMap/Map - 注意类文档中讨论的方法契约和边界。
-
很难找出你在问什么,原因是你提出了一些预先优化的解决方案而不是问题。我建议写下你需要的方法的声明。我猜你的问题根本没有
Integers。另请注意,序列化的表单可以与对象完全解耦,因此空间可能非常不相关。
标签: java performance list map set