交换数组中的元素(Java)

时间:2016-08-06 04:48:29

标签: java arrays

Java中是否有任何预定义的数组方法可以直接交换两个元素?我们可以使用或不使用临时变量的函数,这很好。但是我想知道有没有像Arrays.sort()这样的方法进行交换?

2 个答案:

答案 0 :(得分:3)

您需要使用swap接口的List方法。 List.swap的定义是这样的......

public static <E> void swap(List<E> a, int i, int j) {
    E tmp = a.get(i);
    a.set(i, a.get(j));
    a.set(j, tmp);
}

doc 表示This is a polymorphic algorithm: It swaps two elements in any List, regardless of its implementation type.

如果您不熟悉java Collections,那么您首先需要熟悉它。

答案 1 :(得分:2)

  

Java中是否有任何预定义的数组方法可供人们使用   直接交换两个元素?

默认Java API没有任何交换数组元素的功能。但是您可以使用Collections.swap(list, index1, index2);交换列表元素,并且可以将数组转换为列表并执行交换,然后将列表转换为数组。

如果您不想执行此类操作,您可以查看可以提供此类功能的第三方库。

您还可以创建自己的通用功能。

例如,

public class Test {

    @SuppressWarnings("unchecked")
    public static <T> void swap(T[] arr, int index1, int index2) {
        // Need to add null check and index checks
        List<T> list = Arrays.asList(arr);
        Collections.swap(list, index1, index2);
        arr = (T[]) list.toArray();
    }

    public static void main(String[] args) {
        Integer[] arr = { 1, 2, 3, 4, 5 };
        swap(arr, 1, 2);
        System.out.println(Arrays.asList(arr));
    }

}

<强>输出

[1, 3, 2, 4, 5]

注意:

  1. 上述功能对原始数组不起作用
  2. 添加SuppressWarnings以避免取消选中投射警告