Java Hashmap在第12个索引中插入第一条记录
我正在将ArrayList插入映射(对象id作为键,对象作为值) 第一次插入发生在第12个索引处 因为HashMap的默认大小是16,所以它将在第一个索引中插入第四条记录(因为索引到达最后一条意味着第16条) 所以我点错菜了 甚至我也尝试了Java Hashmap在第12个索引中插入第一条记录,java,dictionary,hashmap,linkedhashmap,Java,Dictionary,Hashmap,Linkedhashmap,我正在将ArrayList插入映射(对象id作为键,对象作为值) 第一次插入发生在第12个索引处 因为HashMap的默认大小是16,所以它将在第一个索引中插入第四条记录(因为索引到达最后一条意味着第16条) 所以我点错菜了 甚至我也尝试了LinkedHashMap。同样的结果正在到来 这是我的代码: for (Type object: Objects) { map.put(object.obj.getId() , object); } 请帮我把这个修好 谢谢。Linked
LinkedHashMap
。同样的结果正在到来
这是我的代码:
for (Type object: Objects) {
map.put(object.obj.getId() , object);
}
请帮我把这个修好
谢谢。LinkedHashMap正是您想要的
它与HashMap完全相同,只是当您对它进行迭代时,它会按插入顺序显示项目。映射不用于基于索引的访问。没有什么比得上
map.get(index)
。如其他答案/评论中所述,在迭代时,所有可能的操作都保持顺序:
for (Type object: Objects) {
map.put(object.obj.getId() , object);
}
for (Entry entry: map.entrySet()) {
// should be same order as inserted if LinkedHashMap is used
}
您不应该关心地图的内部状态。重要的是所描述的行为。您期望的顺序是什么?HashMap没有顺序?LinkedHashMap为您提供插入顺序。如果您想对键进行排序,请使用树形图。@Eran我正在一个映射中插入6条记录。插入从第12个索引开始。(我通过调试看到了。)但我希望从1号开始。你不能控制索引(至少不能直接控制)。该索引是根据
hashCode
确定的。你们不应该关心索引。那个么我怎么才能在地图的开头得到第一条插入的记录呢。我需要一个插入顺序。我也试过LinkedHashMap。它也给出了相同的结果(从12日开始),您的第一条记录仍然在原始列表中。如果您想跟踪插入对象的顺序,可以将ID存储在另一个列表中。最后一条记录正在开始插入。@SivaPasupathi否,LinkedHashMap的内部数据将其存储在hastable的某个索引中。这并不意味着它的行为是这样的。停止调试库并开始阅读API文档。如果您尝试一下我的示例,它将完全按照所描述的那样工作。存储在第12个索引中的元素将在迭代时首先出现。