使用arraylist的镜像方法

时间:2015-06-11 02:30:12

标签: java arraylist

我正在写一个" Mirror"向后复制消息的方法,如果大小是偶数,则添加到原始ArrayList。

public ArrayList<Integer> mirror(ArrayList<Integer> mr) {
    if (mr.size() % 2 == 0) {

        for (int i = mr.size() - 1; i > 0; i--) {
            mr.add(mr.get(i));
        }
    }
    return mr;
}

虽然这个不给1 e.g。

[1,2,3,4]->[1,2,3,4,4,3,2]

如果i&gt; 0更改为i&gt; = 0,则

[1,2,3,4]-> [1, 2, 3, 4, 4, 3, 2, 1, 1, 2, 3, 4, 4, 3, 2, 1]

4 个答案:

答案 0 :(得分:2)

你怎么称镜子?

当我将i > 0更改为i >= 0时,我会得到您期待的结果。

public static void main(String[] args) throws Exception {
    ArrayList<Integer> list = new ArrayList(Arrays.asList(1, 2, 3, 4));
    System.out.println(mirror(list));
}

public static ArrayList<Integer> mirror(ArrayList<Integer> mr) {
    if (mr.size() % 2 == 0) {
        for (int i = mr.size() - 1; i >= 0; i--) {
            mr.add(mr.get(i));
        }
    }
    return mr;
}

结果:

[1,2,3,4,4,3,2,1]

更新

实际上为什么检查它是否是一个大小合适的列表?只是镜像任何大小。

public static void main(String[] args) throws Exception {
    ArrayList<Integer> list = new ArrayList(Arrays.asList(1, 2, 3));
    System.out.println(mirror(list));
}

public static ArrayList<Integer> mirror(ArrayList<Integer> mr) {
    for (int i = mr.size() - 1; i >= 0; i--) {
        mr.add(mr.get(i));
    }

    return mr;
}

结果:

[1,2,3,3,2,1]

答案 1 :(得分:1)

你只需要这样做:

  • 检查列表大小是否均匀
  • 制作原始列表的副本
  • 撤消副本
  • 将反向副本添加到原始列表

<强>代码:

import java.util.ArrayList;
import java.util.Collections;

public class Snippet {
    public static ArrayList<Integer> mirror(ArrayList<Integer> mr) {

        if (mr.size() % 2 == 0) {

            ArrayList<Integer> copy = new ArrayList<>();
            copy.addAll(mr); // Copy original list
            Collections.reverse(copy); // Reverse copy
            mr.addAll(copy); // Append reversed copy to original list
        }
        return mr;
    }

    public static void main(String [] args) {

        ArrayList<Integer> lst = new ArrayList<Integer>();
        lst.add(1);
        lst.add(2);
        lst.add(3);
        lst.add(4);

        lst = mirror(lst);
        for(Integer n : lst) {
            System.out.print(n + " ");
        }
    }
}

<强>输出:

1 2 3 4 4 3 2 1 

答案 2 :(得分:0)

数组或任何集合都有0作为第一个元素的索引。当你说i>0时,它实际上会跳过数组的第一个元素,即你的情况下为1。

答案 3 :(得分:0)

使用现有JDK方法的替代解决方案:

public static <E, T extends List<E>> T mirror(T mr) {
    int size = mr.size();
    mr.addAll(mr.subList(0, size));
    Collections.reverse(mr.subList(size, size*2));
    return mr;
}

请注意,现在该方法更通用:它可以使用任何可变列表类型(不仅是ArrayList)和任何列表元素类型(不仅仅是Integer)。