Java:在保留原始列表的同时创建单独的排序Arraylist

时间:2017-05-09 18:35:59

标签: java arraylist

我有以下功能。它接收一个数组列表。

在我的GUI上,我有一个按钮可以在两种状态之间切换。一个按字母顺序对列表进行排序,另一个按照外观顺序打印出列表。

请注意,我正在从外部文件填充arraylist,并且我在另一个函数中打开此文件,因此重新打开文件并使用其内容重新填充列表数组似乎是不必要的。

就像现在一样,列表按字母顺序排序,但不会按原始顺序打印。

如何创建一个单独的列表来保存已排序的列表,同时保持原始列表的顺序?

由于

sortButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                if (sortButton.getText().equals("Sort by Route")){
                    sortButton.setText("Sort Alphabetically");
                        Journey value = mapper.get(objectName);
                        ArrayList stops = value.getNewStop(); //loads an arraylist into stops
                        System.out.println(stops);
                    }
                }

                else if (sortButton.getText().equals("Sort Alphabetically")){               
                    sortButton.setText("Sort by Route");                
                        Journey value = mapper.get(objectName);
                        ArrayList stopsSorted = value.getNewStop(); // use the arraylist attribute
                        Collections.sort(stopsSorted);
                        System.out.println(stopsSorted);
                    }
                }
            }
        }); 

2 个答案:

答案 0 :(得分:1)

我将假设ArrayList持有String s:

ArrayList<String> stopsSorted = new ArrayList<>(value.getNewStop()); // use the arraylist attribute
Collections.sort(stopsSorted);
System.out.println(stopsSorted);

如您所见,我们将我们不想修改的ArrayList传递给新ArrayList<String>的构造函数。

答案 1 :(得分:0)

您应该能够克隆原始列表并对克隆进行排序。然后你只需切换你显示的内容 - 排序列表或原始列表。

ArrayList stopsSorted = stops.clone()
Collections.sort(stopsSorted);
System.out.println(stopsSorted)