I was using Arrays.sort() function to sort 2d array (int[][] array). Since I want to sort it base on the first element. For example, {{2,3},{1,4}} base on 1st element the array will be {{1,4},{2,3}}. So I override the compare function.

```
Arrays.sort(arr, new Comparator<int[]>() {

    @Override
    public int compare(int[] o1, int[] o2){
        if(o1[0] < o2[0]){
            return -1;
        } else if (o1[0] > o2[0]) {
            return 1;
        } else {
            return 0;
        }
    }

})

```

I know this sort work. But I don't understand how this compare work. 
I was thinking the 

```
new Comparator<int[]>  

```

should be 

```
new Comparator<int[][]>

```

since this is 2d array. and inside of compare function should be compare

```
o1[0][0]  and  o2[0][0]

```

Can anyone help me understand it?

Also this is using Arrays.sort, can I use Collections.sort? what is different between it?

Thanks