在Java中将数组的一部分移到前面

时间:2014-07-05 11:39:18

标签: java arrays

我有一个类似的数组:

[null, null, 3, 4, null]

我想将其更改为与此类似的数组:

[3, 4, null, null, null]

我知道如何手动完成,但看起来很难看。 是否有内置(使用最少的自定义代码)方法吗? (可能是System.arraycopy的东西)

我完成了类似的事情(感谢@Braj的想法):

@Test
public void test() {
  Integer[] k = new Integer[]{null, null, 3, 2, 1};
  k[1] = null;
  Arrays.sort(k, new Comparator<Object>() {
    public int compare(Object o1, Object o2) {
      System.out.println(o1);
      if (o1 == null) return 1;
      else if(o2 == null) return -1;
      else return 0;
    }
  });
  assertArrayEquals(
    new Integer[]{3, 2, 1, null, null},
    k
  );
}

如果感兴趣的人有a bigger problem which tried to solve with this code

2 个答案:

答案 0 :(得分:6)

使用Arrays.sort(T[],Comparator)并传递Comparator以根据您自己的逻辑进行排序。

在此处阅读更多内容并查找示例代码


以下是对数组进行排序的示例代码,最后推送null值。

注意:(根据您的需要进行更改,未经过充分测试

    final Integer[] data = new Integer[] { null, null, 3, 4, null };
    Arrays.sort(data, new Comparator<Integer>() {
        public int compare(Integer o1, Integer o2) {
            if(o1 != null && o2!=null){
                return o1.compareTo(o2);
            }else if(o2 != null){
                return o2;
            }else{                  
                return Integer.MIN_VALUE; // null values in the end
            }
        }
    });

    System.out.println(Arrays.toString(data));

输出:

   [3, 4, null, null, null]

修改

如果您只对最后移动null值感兴趣,请在以下帖子中找到由@Dmitry Ginzburg回答的示例代码

答案 1 :(得分:2)

来自Java标准库的sort算法是稳定的,因此,如果我们正在制作非空相同的元素(在排序的上下文中),它将保持顺序:< / p>

Arrays.sort(data, new Comparator<Integer>() {
    public int compare (Integer x1, Integer x2) {
        if (x1 == null && x2 != null)
            return 1;
        else if (x1 != null && x2 == null)
            return -1;
        else
            return 0;
    }
});