2013-03-21 35 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