最佳 Java 数据结构:映射还是列表?
Best Java Data Structure: Map or List?
我需要深入了解一个基本的难题:List 还是 Map?
我有两个数字字段对应一个键(字符串)。我需要传递大量这些记录。我可以用键上的比较器创建所有三个的对象并列出它们,或者我可以创建两个字段的对象并在键上散列(可能是 LinkedHashMap)。谁能指出每个选项的 pros/cons?
这实际上取决于您要如何检索记录。
如果您需要相对随机的访问,Map 结构所需的额外内存开销将允许您进行与插入顺序无关的恒定时间访问。
如果您只打算以固定顺序检索记录,那么 List 是更好的选择,因为它在内存使用方面的重量更轻。
This question与Java中任一结构的内存占用有关。
我发现了一个类似的问题,这是他们接受的答案。
Java map: An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value.
Java list: An ordered collection (also known as a sequence). The user of this interface has precise control over where in the list each element is inserted. The user can access elements by their integer index (position in the list), and search for elements in the list.
The difference is that they are different. Map is a mapping of key/values, a list of a list of items.
如果您根本不关心查找条目 , 而您只关心内存消耗,请使用 List
。有关各种数据结构的内存消耗的信息,请参阅 https://code.google.com/p/memory-measurer/wiki/ElementCostInDataStructures。
如果您需要从某个不是连续整数索引的特定键进行高效查找,请使用Map
。
我需要深入了解一个基本的难题:List 还是 Map?
我有两个数字字段对应一个键(字符串)。我需要传递大量这些记录。我可以用键上的比较器创建所有三个的对象并列出它们,或者我可以创建两个字段的对象并在键上散列(可能是 LinkedHashMap)。谁能指出每个选项的 pros/cons?
这实际上取决于您要如何检索记录。
如果您需要相对随机的访问,Map 结构所需的额外内存开销将允许您进行与插入顺序无关的恒定时间访问。
如果您只打算以固定顺序检索记录,那么 List 是更好的选择,因为它在内存使用方面的重量更轻。
This question与Java中任一结构的内存占用有关。
我发现了一个类似的问题,这是他们接受的答案。
Java map: An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value.
Java list: An ordered collection (also known as a sequence). The user of this interface has precise control over where in the list each element is inserted. The user can access elements by their integer index (position in the list), and search for elements in the list.
The difference is that they are different. Map is a mapping of key/values, a list of a list of items.
如果您根本不关心查找条目 , 而您只关心内存消耗,请使用 List
。有关各种数据结构的内存消耗的信息,请参阅 https://code.google.com/p/memory-measurer/wiki/ElementCostInDataStructures。
如果您需要从某个不是连续整数索引的特定键进行高效查找,请使用Map
。