如何从地图中删除条目并通过键值重新排序条目?

时间:2017-04-14 20:37:26

标签: java

这是我一直在努力的一个小程序,跟踪交易中的一些货币收益/损失。

除了我遇到的这个问题,我基本完成了它。

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();
        }
    });

所以这个地图放到一个表中,如果我删除任何条目,但第一个,所有工作正常。但是,如果我删除它删除的第一个条目,但该表不会自行采取,我得出结论它必须是地图排序。

是否有一种方法可以在删除条目后获取地图的值,并通过其键值重新排序,以便它们按数字顺序保留?

1 个答案:

答案 0 :(得分:1)

使用LinkedHashMap解决问题的方法是保留插入顺序,而不是按实际键排序。

我建议让用户界面在显示条目时对条目进行排序,而不是存储它们,而不是按顺序存储地图条目。想象一下,更改100个地图条目 - 在最坏的情况下,地图必须进行100次排序,如果只显示一次,则这是不必要的(很可能您更频繁地更改地图而不是显示/刷新它)。

根据@ jaredr的建议,如果您必须保留关键顺序,请查看SortedMap