在ArrayList中反转元素<integer> Java </integer>

时间:2013-05-21 14:52:01

标签: java arraylist integer invert

好的,所以这个方法的重点是反转类型的ArrayList中的元素。所以,如果我有元素:

5 6 7 8 9 10

一旦我调用该方法,元素的位置应该是反转的:

10 9 8 7 6 5

这是方法,非常感谢任何建议:)。

public void invertElements()
    {
        for (int i = list.size()-1; i <= -1; i--)
        {
            int temp = list.get(i);
            for(int j = 0; j < list.size()-1; j++)
            {
            list.set(j, temp);
            }

        }
    }

list是我的ArrayList的名称。

更新:刚试过这种方式:

public void invertElements()
    {
        int index = 0;
        for (int i = list.size()-1; i > -1; i--)
        {
            int temp = list.get(i);
            list.set(index, temp);
            index++;
            if(index == list.size()-1)
            {
                break;
            }

        }
    }

给出输出:10,9,8,9,10 有人可以向我解释原因吗?

2 个答案:

答案 0 :(得分:0)

您可以在每次迭代时获取列表的末端并交换它们:

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
    for (int i = 0; i < list.size()/2; i++){
                int temp = list.get(i);
                int temp2 = list.get(list.size()-1-i);
                list.set(i, temp2);
                list.set(list.size()-1-i, temp);
      }
        for(Integer i : list)
            System.out.print(i+"-");

给出输出:

  

10-9-8-7-6-5-4-3-2-1 -

在第一次迭代时:temp = 1 / temp2 = 10:我们交换它们 在第二次迭代:temp = 2 / temp2 = 9:我们交换它们

我们循环直到我们遍历列表的所有元素,即列表的大小除以2。

答案 1 :(得分:0)

解决方案

public void invertElems(List<Integer> list) {
  for (int i = 0; i < list.size() / 2; ++i) { // we only need iterating half of the size of list
    int elem = list.get(i); // we store element in additional variable
    list.set(i, list.get(list.size() - i - 1)); // we set i-th elementh with i-th element from the back
    list.set(list.size() - i - 1, elem);
  }
}

线性时间。随意提问。