Java 如何根据另一个阵列列表的顺序对多个阵列列表进行排序?
根据一个列表的排序顺序对多个列表进行排序,我很难找到最好的方法。目前,列表是根据其索引排序的。“出发时间”列表以(00:00 AM/PM)格式保存时间字符串。它们的初始化方式如下:Java 如何根据另一个阵列列表的顺序对多个阵列列表进行排序?,java,android,sorting,arraylist,Java,Android,Sorting,Arraylist,根据一个列表的排序顺序对多个列表进行排序,我很难找到最好的方法。目前,列表是根据其索引排序的。“出发时间”列表以(00:00 AM/PM)格式保存时间字符串。它们的初始化方式如下: public static List<String> departureTime = new ArrayList<String>(); public static List<String> mode = new ArrayList<String>(); public
public static List<String> departureTime = new ArrayList<String>();
public static List<String> mode = new ArrayList<String>();
public static List<String> busNo = new ArrayList<String>();
public static List<String> busStopName = new ArrayList<String>();
public static List<String> arrivalTime = new ArrayList<String>();
public static List<String> dur = new ArrayList<String>();
publicstaticlist departureTime=newarraylist();
公共静态列表模式=新建ArrayList();
public static List busNo=new ArrayList();
公共静态列表busStopName=new ArrayList();
公共静态列表到达时间=新ArrayList();
public static List dur=new ArrayList();
我需要根据出发时间数组列表中出发时间的排序顺序对所有列表进行排序。在不改变结果数据结构的情况下,对这些列表进行排序的最佳方法是什么。如有任何协助,将不胜感激
谢谢
Matt如评论中所述,创建一个包含所有值的对象,然后对对象列表进行排序会更容易 如果由于某种原因这是不可能的,则需要编写自己的排序方法,例如选择排序,同时对列表中的所有对象执行排列操作 这是一个简单但非最优的算法。请随意将其调整为其他类型。只有当所有列表的长度相同时,这才有效
public void sort() {
String[] departureTimeArray = departureTime.toArray(new String[departureTime.size()]);
String[] modeArray = mode.toArray(new String[mode.size()]);
//here you convert the other lists to arrays
int lenD = departureTimeArray.length;
int j = 0;
for(int i=0;i<lenD;i++){
j = i;
for(int k = i;k<lenD;k++){
if(departureTimeArray[j].compareTo(departureTimeArray[k])>0){
j = k;
}
}
permutation(departureTimeArray, i, j);
permutation(modeArray, i, j);
//here do the same for other arrays
}
departureTime = Arrays.asList(departureTimeArray);
mode = Arrays.asList(modeArray);
//here convert back arrays to list
}
private void permutation(String[] array, int i, int j) {
String tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
public void sort(){
字符串[]departureTimeArray=departureTime.toArray(新字符串[departureTime.size()]);
String[]modeArray=mode.toArray(新字符串[mode.size()]);
//在这里,您可以将其他列表转换为数组
int lenD=departureTimeArray.length;
int j=0;
对于注释中所述的(inti=0;i),创建一个包含所有值的对象,然后对对象列表进行排序会更容易
如果由于某种原因这是不可能的,则需要编写自己的排序方法,例如选择排序,同时对列表中的所有对象执行排列操作
这是一个简单但非最优的算法。请随意将其应用于其他类别。只有当所有列表的长度相同时,这才有效
public void sort() {
String[] departureTimeArray = departureTime.toArray(new String[departureTime.size()]);
String[] modeArray = mode.toArray(new String[mode.size()]);
//here you convert the other lists to arrays
int lenD = departureTimeArray.length;
int j = 0;
for(int i=0;i<lenD;i++){
j = i;
for(int k = i;k<lenD;k++){
if(departureTimeArray[j].compareTo(departureTimeArray[k])>0){
j = k;
}
}
permutation(departureTimeArray, i, j);
permutation(modeArray, i, j);
//here do the same for other arrays
}
departureTime = Arrays.asList(departureTimeArray);
mode = Arrays.asList(modeArray);
//here convert back arrays to list
}
private void permutation(String[] array, int i, int j) {
String tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
public void sort(){
字符串[]departureTimeArray=departureTime.toArray(新字符串[departureTime.size()]);
String[]modeArray=mode.toArray(新字符串[mode.size()]);
//在这里,您可以将其他列表转换为数组
int lenD=departureTimeArray.length;
int j=0;
对于(int i=0;i您可以先保存每次出发时间的索引,然后再在Hashmap
中进行排序。然后像往常一样只对该列表进行排序,然后在另一个Hashmap中再次保存索引
现在,您知道一个给定的字符串在排序之前处于位置n
,而在排序之后现在处于位置n'
。因此,您可以使用此信息手动交换其他列表的元素
这种方法是脆弱的,因为如果列表中有重复的元素,那么在排序之后你就不知道哪个元素是哪个。因此你最好按照其他答案中的建议创建一个容器类。你可以在排序之前将每个出发时间的索引保存在一个Hashmap
中。然后只将该列表排序为usual、 然后在另一个hashmap中再次保存索引
现在,您知道一个给定的字符串在排序之前处于位置n
,而在排序之后现在处于位置n'
。因此,您可以使用此信息手动交换其他列表的元素
这种方法很脆弱,因为如果列表中有重复的元素,那么在排序后你就不知道哪个元素是哪个。因此,最好按照其他答案中的建议创建一个容器类。通过创建一个包含每个列表中的值的对象来解决这个问题。然后你可以创建一个对象列表,并根据您关心的值进行排序。通过创建一个包含每个列表中的值的对象,可以更轻松地解决此问题。然后,您可以拥有一个对象列表,并根据您关心的值进行排序。您好,Yves,我已经实现了您的解决方案,但我的应用程序因此崩溃。我的所有列表具有相同的长度,并且departureTimeArray中每个字符串的格式为hh:mm a(下午3:32)。Logcat表示转换存在问题:java.lang.Object[]无法转换为java.lang.string[]。但是,departureTimeArray已初始化为String类型的ArrayList。您知道为什么会发生这种情况吗?谢谢,MattI不得不稍微更改您的答案以处理强制转换错误。我能够使其正常工作。谢谢!您好,我刚看到您的答案,我想我必须给出一个新字符串[]作为toArray方法中的一个参数,我以这种方式修改了我的答案Hello Yves,我已经实现了你的解决方案,但是我的应用程序因此崩溃了。我所有的列表都是相同长度的,并且departureTimeArray中每个字符串的格式都是hh:mm a(3:32pm)。Logcat声明转换有问题:java.lang.Object[]无法转换为java.lang.String[]。但是,departureTimeArray已初始化为String类型的ArrayList。您知道为什么会发生这种情况吗?谢谢,MattI不得不稍微更改您的答案以处理转换错误。我能够使其正常工作。谢谢!您好,我刚刚看到您的答案,我想我必须给出一个新字符串[]作为toArray方法中的一个参数,我以这种方式修改了我的答案