我正在尝试从ArrayList
获取已排序的值,并希望将其存储在HashMap
中,其中ArrayList
的值将成为HashMap
的键}。 HashMap
中的值的顺序是否仍然与ArrayList
的顺序相同?
答案 0 :(得分:2)
没有。请改用TreeMap。这将保留插入顺序。
答案 1 :(得分:1)
HashMap不保证映射的存储或迭代顺序,因此只需运行ArrayList并将它们作为键放入HashMap就很可能导致无序迭代。
正如其他人所指出的,LinkedHashMap确实为迭代保留了插入顺序。但是,额外的插入运行将导致无序迭代。 HashMap和LinkedHashMap都支持恒定时间查找 - LinkedHashMap支付其在空间中的额外功能(通过维护键之间的指针)。
正如其他人也指出的那样,TreeMap会在更新后保留订单,因此这对您来说可能是更好的选择。当然,如果使用特定的Comparator对ArrayList进行排序,那么必须将相同的Comparator提供给构建的TreeMap,以使排序相同。请注意,由于实现为红黑搜索树,TreeMap没有恒定的时间查找。
答案 2 :(得分:0)
由于您的ArrayList已经订购,因此无需使用TreeMap,因为这将再次与订单进行比较,并且不需要。您应该使用LinkedHashMap,它会在您输入值时保持ArrayList的确切顺序。
答案 3 :(得分:-1)
选中此项:将ArrayList的值插入HashMap
HashMap<String, Item> itemMap = new HashMap<String, Item>();
for (Item item : itemList)
{
itemMap.put(item.getitemCode(), item);
}