假设我有一个String的ArrayList和一个int的ArrayList。
我的字符串列表包含:
index : value
-----------------
0 : "Paul"
1 : "Peter"
2 : "Maria"
My ArrayList of Integers contians:
index : value
-----------------
0 : 2
1 : 0
2 : 1
假设我使用
对我的int数组进行排序Collections.sort(myArrayOfint);
结果在索引0处应为0,在索引1处应为1,在索引2处为2对吗?
我想要做的是考虑我的int数组的新顺序对我的String数组进行排序,例如“Paul”将转到索引1,“Peter”转到索引2,“Maria”转到索引0。 order将与我的int数组交换相同。
我怎么能这样做,有可能吗?
答案 0 :(得分:4)
您可以使用属性创建类,并使用基于不同属性进行比较的不同Comparator
:
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());
}
});
答案 1 :(得分:3)
我的感觉是你有一个int数组和一个字符串数组,但是你应该有一个Person
个对象数组,Person
有一个类型为ID
的字段int
以及name
类型的字段String
。按ID对您的人员进行排序,名称和ID当然会按相同的顺序排序。
使用对象。这就是OOP的全部意义。
答案 2 :(得分:1)
您不应该对myArrayOfint
进行排序:它根据您对字符串数组进行排序来定义排列。最简单的方法是使用临时数组,如下所示:
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"
这个问题也可以在没有临时数组的情况下解决,但算法更复杂。