2013-04-12 46 views
53

Làm cách nào để trao đổi phần tử đầu tiên và cuối cùng của một ArrayList? Tôi biết cách hoán đổi các phần tử của mảng: thiết lập giá trị tạm thời để lưu trữ phần tử đầu tiên, cho phép phần tử đầu tiên bằng phần tử cuối cùng, sau đó cho phần tử cuối cùng bằng phần tử đầu tiên được lưu trữ.Yếu tố hoán đổi danh sách Array

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

Vì vậy, đối với một ArrayList<String> nó sẽ như thế này?

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

Câu hỏi này có hiệu quả "làm cách nào để truy cập và thay đổi các thành phần của một' Danh sách' "? – Raedwald

+3

Đây là câu hỏi được nhắm mục tiêu nhiều hơn so với câu hỏi được đánh dấu là trùng lặp. – TheCrazyProgrammer

+0

Tôi đồng ý. Việc thay đổi một danh sách mảng là một điều khác, trao đổi 2 nút là một điều khác. "Collections.swap" là câu trả lời đúng nhưng câu trả lời này không thể truy cập được thông qua một bản sao được đánh dấu trùng lặp; "Cách thay đổi giá trị của phần tử ArrayList trong java". Một trong hai câu hỏi trùng lặp nên được sửa đổi, hoặc đánh dấu trùng lặp nên được loại bỏ. – Berk

Trả lời

218

Bạn có thể sử dụng Collections.swap(List<?> list, int i, int j);

4

Sử dụng như thế này. Đây là trình biên dịch trực tuyến của mã. Hãy xem http://ideone.com/MJJwtc

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

Hoán đổi các phần tử tại các vị trí được chỉ định trong danh sách được chỉ định. (Nếu các vị trí được chỉ định bằng nhau, hãy gọi phương thức này để lại danh sách không thay đổi.)

Tham số: danh sách - Danh sách để hoán đổi thành phần. i - chỉ mục của một phần tử được hoán đổi. j - chỉ mục của phần tử khác được hoán đổi.

đọc các tài liệu chính thức của bộ sưu tập

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 dụ biên soạn http://ideone.com/MJJwtc

12

Trong Java, bạn không thể đặt một giá trị trong ArrayList bằng cách gán cho nó, có một set() để gọi:

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

bạn đời! Cảm ơn. Tôi đã tìm kiếm một cách sắp xếp ArrayList mà không sử dụng loại sắp xếp sẵn có. Có lẽ, tôi bỏ qua thực tế là phương thức add (index, object) của ArrayList thêm đối tượng vào chỉ mục và quyền tác giả đối tượng đã tồn tại ở vị trí đó (nếu có). Danh sách.remove (i + 1) đã thực hiện thủ thuật! – freerunner

+0

Hãy cẩn thận, tôi đã sử dụng phương thức remove() sau đó add() lúc đầu, nhưng có một số lỗi IndexOutOfBounds. Phương pháp thiết lập hoạt động tốt hơn, ít nhất là đối với tôi. – Azurespot

Các vấn đề liên quan