如果它们满足java中的某个条件,我需要移动数组的对象

时间:2015-03-31 14:41:34

标签: java arrays

所以我有一个数组,我需要获取所有空值(在这种情况下,我正在考虑所有空值-1 null)我需要将它们移动到数组的末尾,并且一旦将所有空值移动到最后,就按升序组织数组。数组是

int [] array = {23,2,34,345,6,1,45,78,-1,-1,-1,-1,61,-1}

我不确定我需要从哪里开始,我们将非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

如果我理解正确,你想要在数组末尾移动所有'-1'。您可以使用比较器。

    Integer[] tab = {23,2,34,345,6,1,45,78,-1,-1,-1,-1,61,-1};

    Arrays.sort(tab, new Comparator<Integer>() {
        @Override
        public int compare(Integer a, Integer b) {
            return a == -1 ? 1 : b == -1 ? -1 : 0;
        }

    });

请注意,您必须将int数组包装在Integer数组中(如上例所示)才能使用比较器。

您可能需要查看比较器documentation

答案 1 :(得分:0)

给定一个数组如:

int[] array = {23, 2, 34, 345, 6, 1, 45, 78, -1, -1, -1, -1, 61, -1}

你可以这样:

  1. 按非递减顺序对数组进行排序:检查Arrays.sort()docs here)方法。

    [-1, -1, -1, -1, -1, 1, 2, 6, 23, 34, 45, 61, 78, 345]
    
  2. 查找排序数组中第一个大于-1 的元素:循环遍历array元素,当找到一个元素{{ {1}},并保留其索引(让我们称之为array[i] > -1)。

    start
  3. 将大于start = 5 的元素复制到数组中的第一个位置:遍历数组,从-10array.length - start

    array[i] = array[i + start]
  4. 使用[1, 2, 6, 23, 34, 45, 61, 78, 345, 34, 45, 61, 78, 345] 填充数组的其余部分:使用-1docs here)将数组填入Arrays.fill(array, fromIndex, toIndex, val),从-1array.length - start

    array.length

答案 2 :(得分:0)

你可以在Arrays.sort()中使用Collections.reverseOrder(),但是,Collections.reverseOrder()函数接受一个类对象,因此你需要将int数组作为Integer数组,其中Integer是一个包装类。以下代码适用于您,请看一下: -

Integer [] array = {23,2,34,345,6,1,45,78,-1,-1,-1,-1,61,-1};
Arrays.sort(array,Collections.reverseOrder());