美文网首页
如何将数组元素逆序

如何将数组元素逆序

作者: michael_fang | 来源:发表于2018-05-19 19:06 被阅读27次

    项目中我们会遇到需要将数组元素逆序输出的情形,可以有好几种方法完成这个需求:
    1、方法一:逆序遍历数组元素并将元素放入新数组,分析时间复杂度是O(n),空间复杂度是o(n)

            for(Integer i = sqList.size() - 1; i >= 0; i --) {
                reversedArray.add(sqList.get(i));
            }
    

    2、方法二:扫描数组元素的前半部分元素,将元素sqListi与其余后半部分对应的元素sqList[sqList.length - i - 1]进行交换,时间复杂度为O(n/2),不需要额外的空间

    private static <T> void reverse(List<T> sqList) {
            if (sqList == null || sqList.size() < 1) {
                return;
            }
            T temp = null;
            Integer size = sqList.size();
            for (Integer j = 0; j < size >> 1; j++) {
                temp = sqList.get(j);
                sqList.set(j, sqList.get(size - j - 1));
                sqList.set(sqList.size() - j - 1, temp);
            }
    }
    

    3、方法三:Collections.reverse(sqList),jdk内部源码实现如下,可以看到jdk源码的实现方式和方法二的思想是一致的,都是交换相应位置上的元素。所以Java中若数组元素逆序直接调用Collections.reverse方法即可。

      public static void reverse(List<?> list) {
            int size = list.size();
            if (size < REVERSE_THRESHOLD || list instanceof RandomAccess) {
                for (int i=0, mid=size>>1, j=size-1; i<mid; i++, j--)
                    swap(list, i, j);
            } else {
                // instead of using a raw type here, it's possible to capture
                // the wildcard but it will require a call to a supplementary
                // private method
                ListIterator fwd = list.listIterator();
                ListIterator rev = list.listIterator(size);
                for (int i=0, mid=list.size()>>1; i<mid; i++) {
                    Object tmp = fwd.next();
                    fwd.set(rev.previous());
                    rev.set(tmp);
                }
            }
     }
    

    相关文章

      网友评论

          本文标题:如何将数组元素逆序

          本文链接:https://www.haomeiwen.com/subject/zsjadftx.html