Java 如何按相同顺序对不同类型数据的2个ArrayList进行排序?

Java 如何按相同顺序对不同类型数据的2个ArrayList进行排序?,java,Java,假设我有一个String的ArrayList和一个int的ArrayList My ArrayList的字符串包含: index : value ----------------- 0 : "Paul" 1 : "Peter" 2 : "Maria" 我的整数数组列表包含: index : value ----------------- 0 : 2 1 : 0 2 : 1 假设我使用 Collections.sort(myArrayOfint)

假设我有一个String的ArrayList和一个int的ArrayList

My ArrayList的字符串包含:

index : value
-----------------
0     : "Paul"
1     : "Peter"
2     : "Maria"
我的整数数组列表包含:

index : value
-----------------
0     : 2
1     : 0
2     : 1
假设我使用

Collections.sort(myArrayOfint);
结果应该是索引0处的0,索引1处的1,索引2处的2,对吗

我想做的是根据int数组的新顺序对字符串数组进行排序,例如Paul将转到索引1,Peter转到索引2,Maria转到索引0。顺序将与我的int数组交换相同


我如何才能做到这一点,这是可能的吗?

您可以创建具有属性的类,并使用基于不同属性进行比较的不同比较器:

public class Person {
    private String name;
    private Integer id;

    //getter/setter
}

List<Person> people = new ArrayList<Person>();

Collections.sort(people, new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        return p1.getName().compareTo(p2.getName());
    }
});


Collections.sort(people, new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        return p1.getId().compareTo(p2.getId());
    }
});

我的感觉是,您有一个int数组和一个String数组,但是您应该有一个Person对象数组,一个Person具有int类型的字段ID和String类型的字段名。按ID对您的人员进行排序,姓名和ID当然会按相同的顺序进行排序

使用对象。这就是OOP的全部内容。

您不应该对MyArrayFint排序:它定义了排序字符串数组所依据的排列。最简单的方法是使用临时数组,如下所示:

String tmp[] = new String[myArrayOfint.length];
for (int i = 0 ; i != myArrayOfint.length ; i++) {
    tmp[i] = myArrayOfStrings[myArrayOfint[i]];
}
myArrayOfStrings = tmp;
这是有效的,因为

myArrayOfStrings[myArrayOfint[0]] = myArrayOfStrings[2] = "Maria"
myArrayOfStrings[myArrayOfint[1]] = myArrayOfStrings[0] = "Paul"
myArrayOfStrings[myArrayOfint[2]] = myArrayOfStrings[1] = "Peter"

这个问题也可以在没有临时阵列的情况下解决,但是算法更复杂。

有没有原因让你有单独的ArrayList,而不是一个包含字符串和int的对象的ArrayList?有没有原因让int与要排序的字符串相关联,并且在将字符串添加到列表中时没有首先使用该int作为索引?可以吗请举一个简短的例子?这似乎是最好的解决办法。如何在ArrayList索引中分隔字符串和int,以及如何按int值对其排序?在βɛƨǤʋʋɢ的答案中有一个示例