在java中,按索引获取和设置项目的最佳数据结构是什么?
我最初使用的是ArrayList,但问题有时候,我需要插入一个大于arraylist大小的元素,如:
pseudocode
array = new ArrayList();
array.set(10, object);
显然这会返回错误。我可以使用sentinel值初始化数组,但使用:
array.size()
总是会说我的阵列充满了边缘。显然它只是充满了哨兵价值。
答案 0 :(得分:3)
如果您始终知道要插入值的索引,那么通常可以使用Map
接口的具体实现。
这组类的优点在于,通过索引(或此上下文中的Key
)的知识,您可以在O(1)时间内直接从内存中检索对象。这意味着没有搜索。
例如:
Map<String, String> map = new HashMap<String, String>();
map.put("KEY", "VALUE");
String key = "KEY";
// Do some processing..
String value = map.get(key);
// value variable now contains "VALUE".
查看documentation,以便真正掌握如何使用这组课程。
答案 1 :(得分:0)
这取决于(通常......)。当你的索引在一定的合理范围内并且你将使用几乎所有的索引时,使用适当大小的数组:
Object[] items = new Object[MAX_INDEX];
如果您的范围更大并且不会使用许多阵列插槽,则可能需要Map
(如其他答案中所述)。 HashMap
是一种可能的实现方式:
Map<Integer, Object> items = new HashMap<Integer, Object>();