有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

假设我有一个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数组交换相同

我该怎么做,可能吗


共 (3) 个答案

  1. # 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"
    

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

  2. # 2 楼答案

    您可以创建具有属性的类,并使用基于不同属性进行比较的不同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());
        }
    });
    
  3. # 3 楼答案

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

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