2013-04-12 196 views
53

如何交換ArrayList的第一個元素和最後一個元素? 我知道如何交換數組的元素:設置一個臨時值來存儲第一個元素,讓第一個元素等於最後一個元素,然後讓最後一個元素等於存儲的第一個元素。Arraylist交換元素

int a = values[0]; 
    int n = values.length; 
    values[0] = values[n-1]; 
    values[n-1] = a; 

因此對於ArrayList<String>會是這樣嗎?

String a = words.get(0); 
    int n = words.size(); 
    words.get(0) = words.get(n-1); 
    words.get(n-1) = a 
+1

這個問題實際上是「我如何訪問和修改'List'的元素」? – Raedwald

+3

這是比標記爲重複的問題更有針對性的問題。 – TheCrazyProgrammer

+0

我同意。變換數組列表是不同的事情,交換2個節點是不同的事情。 「Collections.swap」是正確的答案,但這個答案無法通過重複標記的答案到達; 「如何更改Java中的ArrayList元素的值」。重複問題應該被修改,或重複標記應該被刪除。 – Berk

回答

218

您可以使用Collections.swap(List<?> list, int i, int j);

4

這樣使用。這裏是代碼的在線編譯。看一看http://ideone.com/MJJwtc

public static void swap(List list, 
         int i, 
         int j) 

將元素交換到指定列表中的指定位置。 (如果指定的位置相同,則調用此方法將使列表保持不變。)

參數: list - 交換元素的列表。 i - 要交換的一個元素的索引。 j - 要交換的其他元素的索引。

閱讀收集的官方文檔

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#swap%28java.util.List,%20int,%20int%29

import java.util.*; 
import java.lang.*; 

class Main { 
    public static void main(String[] args) throws java.lang.Exception  
    {  
     //create an ArrayList object 
     ArrayList words = new ArrayList(); 

     //Add elements to Arraylist 
     words.add("A"); 
     words.add("B"); 
     words.add("C"); 
     words.add("D"); 
     words.add("E"); 

     System.out.println("Before swaping, ArrayList contains : " + words); 

     /* 
     To swap elements of Java ArrayList use, 
     static void swap(List list, int firstElement, int secondElement) 
     method of Collections class. Where firstElement is the index of first 
     element to be swapped and secondElement is the index of the second element 
     to be swapped. 

     If the specified positions are equal, list remains unchanged. 

     Please note that, this method can throw IndexOutOfBoundsException if 
     any of the index values is not in range.  */ 

     Collections.swap(words, 0, words.size() - 1); 

     System.out.println("After swaping, ArrayList contains : " + words);  

    } 
} 

ONELINE編譯例如http://ideone.com/MJJwtc

12

在Java中,你不能將其分配給它設置在ArrayList中的值,有一個set()撥打方法:

String a = words.get(0); 
words.set(0, words.get(words.size() - 1)); 
words.set(words.size() - 1, a) 
2
for (int i = 0; i < list.size(); i++) { 
     if (i < list.size() - 1) { 
      if (list.get(i) > list.get(i + 1)) { 
       int j = list.get(i); 
       list.remove(i); 
       list.add(i, list.get(i)); 
       list.remove(i + 1); 
       list.add(j); 
       i = -1; 
      } 
     } 
    } 
+0

隊友!謝謝。我正在尋找一種排序ArrayList而不使用內置排序的方法。很可能,我忽略了ArrayList的add(index,object)方法將對象添加到索引並右移已存在於該位置的對象(如果有的話)的事實。 list.remove(i + 1)做到了! – freerunner

+0

小心,我首先使用remove()和add()方法,但得到了一些IndexOutOfBounds錯誤。設定好的方法效果更好,至少對我而言。 – Azurespot