我需要洞察一个基本的窘境:列表或地图?
我有两个与键(字符串)对应的数字字段。我需要传递大量这些记录。我可以使用键上的Comparator创建所有三个对象并列出它们,或者我可以在键上创建两个字段的对象并哈希(可能是LinkedHashMap)。任何人都可以指出每个选项的优缺点吗?
答案 0 :(得分:2)
如果您不关心查找条目 而您只关心内存消耗,请使用List
。有关各种数据结构的内存消耗的信息,请参阅https://code.google.com/p/memory-measurer/wiki/ElementCostInDataStructures。
如果您需要从不连续整数索引的某个特定键进行有效查找,请使用Map
。
答案 1 :(得分:1)
我发现了一个类似的问题,这是他们接受的答案。
Java map:将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射一个值。
Java list:有序集合(也称为序列)。该接口的用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。
不同之处在于它们是不同的。 Map是键/值的映射,是项列表的列表。
答案 2 :(得分:0)
这实际上取决于您想要如何检索记录。
如果您需要相对随机访问,Map结构所需的额外内存开销将允许您进行恒定时间访问,而不受插入顺序的影响。
如果您只是按固定顺序检索记录,那么List是更好的选择,因为它在内存使用方面会更轻。
This question与Java中任一结构的内存占用有关。