Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从映射中删除条目并通过键值对条目重新排序?_Java - Fatal编程技术网

Java 如何从映射中删除条目并通过键值对条目重新排序?

Java 如何从映射中删除条目并通过键值对条目重新排序?,java,Java,这是我一直在做的一个小程序,它跟踪交易中的一些金钱收益/损失 除了这个问题,我基本上已经完成了 deleteItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Map<Integer, Entry> newMap = new LinkedHashMap<>();

这是我一直在做的一个小程序,它跟踪交易中的一些金钱收益/损失

除了这个问题,我基本上已经完成了

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();
        }
    });
所以这个映射被放到一个表中,如果我删除了除第一个之外的任何条目,所有的都可以正常工作。但是,如果我删除了它删除的第一个条目,但是表不会自行恢复,我得出的结论是,它一定是映射顺序

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

使用LinkedHashMap解决问题的问题在于它保留插入顺序,而不是按实际键排序

与按顺序存储地图条目不同,我建议在显示条目时让UI对条目进行排序,而不是在存储条目时。想象一下更改100个地图条目-在最坏的情况下,地图必须被排序100次,如果只显示一次,则这是不必要的。很可能更改地图的频率比显示/刷新地图的频率更高


不过,按照@jaredr的建议,如果您确实必须保留密钥顺序,请查看。

可能会考虑使用TreeMapHmm,因此我不认为这是我的地图造成的问题。我想它落在桌子上了。我通过JSON保存数据,如果条目是2而不是1,表中会显示一个空行,但是如果进入JSON文件并将2更改为1,它会正确显示。我知道映射排序应该可以解决这个问题,但是每次我放入一个新的条目/行时,我应该如何进行排序?@StuartPerera这听起来更像是三元运算符和表的逻辑中的一个缺陷。getSelectedRow!=-1等,但我们必须看到更多的周围代码才能确定。@StuartPerera我不太确定你是否理解我;即使这归结为表逻辑,也不应该在更新映射后对其进行排序。相反,您应该让UI为您对表进行排序。具体的实现取决于您使用的窗口/用户界面工具包。同样,我们必须看到更多的代码才能找到解决方案。我更喜欢保持代码的私密性,但哦,好吧。这是我的密码。这里仍然缺少一些东西。。。