2013-03-21 42 views
0

我目前有一个ArrayListint[]int[]有5个元素。我希望能够根据我的int[]的第二和第四个索引来排序此ArrayList。我如何在Java中做到这一点?在多个索引上对Int []的ArrayList排序

+4

你能解释一下你到底想要做什么吗? “基于第二和第四指标”是什么意思? – Jeffrey 2013-03-21 01:00:23

+0

因此,例如,如果我有以下数组列表[1,4,6,8,9] [1,3,6,7,8] [1,4,6,7,9]顺序将[1 ,3,6,7,8] [1,4,6,7,9] [1,4,6,8,9]即我会先排序第二个索引,如果是相同的,然后排序第四个索引... – user1950055 2013-03-21 01:04:38

回答

2
package com.sandbox; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 

public class Sandbox { 

    public static void main(String[] args) { 
     List<int[]> list = new ArrayList<int[]>(); 
     list.add(new int[]{1, 4, 6, 8, 9}); 
     list.add(new int[]{1,3,6,7,8}); 
     list.add(new int[]{1,4,6,7,9}); 
     Collections.sort(list, new Comparator<int[]>() { 
      public int compare(int[] o1, int[] o2) { 
       int compare = Integer.compare(o1[1], o2[1]); 
       //if they're equal on this element then compare the next element 
       return compare == 0 ? Integer.compare(o1[3], o2[3]) : compare; 
      } 
     }); 
     for (int[] ints : list) { 
      System.out.println(Arrays.toString(ints)); 
     } 
    } 
} 

这是输出:

[1,3,6,7,8] [1,4,6,7,9] [1,4,6,8 9]

+0

嗯辉煌非常感谢!!!如何扩展这个,如果我想排序一些参数指标,即不是必需的2和4?我会声明一个构造函数吗? – user1950055 2013-03-21 01:22:24

+0

这实际上取决于你将如何传递这些信息。但是如果我猜测,我会将'Comparator'提取到它自己的类中,并为它提供一个构造函数,在其中传递想要的索引排序方式。 – 2013-03-21 01:28:17

+0

我似乎无法调用Integer.compare()? – user1950055 2013-03-21 10:25:06

0

都需要这样的

class IntArrayComparator implements Comparator<int[]> { 
     private final int[] ai; 

     IntArrayComparator(int[] ai) { 
      this.ai = ai; 
     } 

     @Override 
     public int compare(int[] a1, int[] a2) { 
      for (int i : ai) { 
       int c = Integer.compare(a1[i], a2[i]); 
       if (c != 0) { 
        return c; 
       } 
      } 
      return 0; 
     } 
    } 

注的自定义比较是Integer.compare(INT,INT)我s在Java 7中添加,在早期版本中使用

int c = (a1[i] < a2[i]) ? -1 : a1[i] == a2[i] ? 0 : 1; 
+0

啊啊谢谢你只是实现这个,但是非常昂贵的调用Integer.compare ...任何想法为什么? – user1950055 2013-03-21 10:25:38

+0

它自1.7以来 – 2013-03-21 10:32:30