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

Java:创建一个单独的排序Arraylist,同时保留原始列表,java,arraylist,Java,Arraylist,我有以下功能。它接收一个数组列表 在我的GUI上,我有一个在两种状态之间切换的按钮。一个按字母顺序排列列表,另一个按出现顺序打印列表 请注意,我是从一个外部文件填充arraylist,并且我是在另一个函数中打开此文件的,因此重新打开该文件并用其内容重新填充列表数组似乎是不必要的 现在,列表按字母顺序进行排序,但不会按原始顺序打印 如何创建一个单独的列表,在保持原始列表有序的同时保存已排序的列表 谢谢 sortButton.addActionListener(new ActionListener(

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

在我的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);
                    }
                }
            }
        }); 

我将假设
ArrayList
包含
String
s:

ArrayList<String> stopsSorted = new ArrayList<>(value.getNewStop()); // use the arraylist attribute
Collections.sort(stopsSorted);
System.out.println(stopsSorted);
ArrayList stopsorted=newArrayList(value.getNewStop());//使用arraylist属性
集合。排序(停止排序);
系统输出打印LN(停止连接);

如您所见,我们将不希望修改的
ArrayList
传递到新
ArrayList
的构造函数中,您应该能够克隆原始列表并对克隆进行排序。然后您只需切换显示的内容-排序列表或原始列表

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

@JonGoe注意,这种方法是浅层克隆,对于不可变类型(即
String
是)来说不是问题,但如果您在内部保存可变对象…@niceman,只要OP除了排序之外不修改
列表中的任何内容,它们就可以了。