2012-01-03 53 views
0

假设我有一个String的ArrayList和一个int的ArrayList。如何按同一顺序排序2个不同类型数据的ArrayList?

我的琴弦的ArrayList包含:

index : value 
----------------- 
0  : "Paul" 
1  : "Peter" 
2  : "Maria" 

我的整数,则为中的ArrayList:

index : value 
----------------- 
0  : 2 
1  : 0 
2  : 1 

假设我有点用

Collections.sort(myArrayOfint); 

我的int数组结果应为0索引0,1索引为1,索引2为2?

我想要做的是排序我的字符串数组考虑我的int数组的新秩序,所以例如“保罗”会去索引1,“彼得”索引2,“玛丽亚”索引0。顺序将与我的int数组相同。

我该怎么做,这有可能吗?

+3

是否有一个原因,你有单独的ArrayLists而不是一个包含具有一个字符串和一个int的对象? – lins314159 2012-01-03 22:31:10

+0

是否有一个原因,你有一个int与你想要排序的字符串相关联,并且在将你的字符串添加到列表时,并没有首先将该int用作索引? – Robin 2012-01-03 22:36:26

回答

4

您可以用属性来创建类,并使用控制:对基于不同特性的不同Comparator S:

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()); 
    } 
}); 
3

我的感觉是,你有int数组和字符串数组,但你应该有Person对象的单个阵列,具有类型int的字段IDPerson以及类型String的字段name。按身份对人员进行排序,并且姓名和ID当然会按照相同的顺序排序。

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

+0

你能举个简单的例子吗?这似乎是最好的解决方案。如何在ArrayList索引中分离String和int,以及如何通过int值对其进行排序? – Samet 2012-01-04 00:23:21

+0

βнɛƨнǤʋяʋиɢ的答案中有一个例子 – 2012-01-04 07:40:55

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" 

这个问题可以不用临时数组来解决为好,但算法更复杂。