簡體   English   中英

反轉ArrayList中的元素 <Integer> 爪哇

[英]Invert Elements in ArrayList<Integer> Java

好的,所以此方法的重點是反轉類型為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。有人可以向我解釋為什么嗎?

您可以在每次迭代時獲取列表的末端並交換它們:

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。

解決方法是

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);
  }
}

線性時間。 隨意問的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM