这是我一直在努力的一个小程序,跟踪交易中的一些货币收益/损失。
除了我遇到的这个问题,我基本完成了它。
deleteItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Map<Integer, Entry> newMap = new LinkedHashMap<>();
if (table.getSelectedRow() != -1) {
System.out.println(table.getSelectedRow() + 1);
entryTable.removeEntry(table.getSelectedRow() + 1);
entries.remove(table.getSelectedRow() + 1);
}
for(Map.Entry<Integer, Entry> entry : entries.entrySet()) {
newMap.put(entry.getKey() - 1 == 1 ? 2 : entry.getKey() - 1, entry.getValue());
}
if (table.getRowCount() == 1) {
Gui.this.saveAll();
}
entries = newMap;
Gui.this.saveAll();
}
});
所以这个地图放到一个表中,如果我删除任何条目,但第一个,所有工作正常。但是,如果我删除它删除的第一个条目,但该表不会自行采取,我得出结论它必须是地图排序。
是否有一种方法可以在删除条目后获取地图的值,并通过其键值重新排序,以便它们按数字顺序保留?
答案 0 :(得分:1)
使用LinkedHashMap
解决问题的方法是保留插入顺序,而不是按实际键排序。
我建议让用户界面在显示条目时对条目进行排序,而不是存储它们,而不是按顺序存储地图条目。想象一下,更改100个地图条目 - 在最坏的情况下,地图必须进行100次排序,如果只显示一次,则这是不必要的(很可能您更频繁地更改地图而不是显示/刷新它)。
根据@ jaredr的建议,如果您必须保留关键顺序,请查看SortedMap。