2009-03-18 8 views
11

Cách tốt nhất để sắp xếp lại các phần tử trong danh sách là gì? Tôi cần khả năng di chuyển các phần tử để di chuyển các phần tử trong danh sách, một bước trở lại hoặc chuyển tiếp trong chỉ mục. Tôi đã nghĩ đến việc lấy chỉ mục của mục, thêm nó vào chỉ mục -1/+2 và loại bỏ tham chiếu cũ.Cách tốt nhất để sắp xếp lại một ArrayList trong Java

Có cách nào nhanh hơn để xử lý sắp xếp lại mà không tạo bản sao trong danh sách trong quy trình hay không.

+0

Vui lòng cung cấp ví dụ. Ví dụ, có danh sách ABCDEF, bạn muốn gì? Một cái gì đó giống như ABCEDF (di chuyển một phần tử) hoặc ABCEF (loại bỏ một phần tử)? Tại sao bạn viết -1/+2 thay vì -1/+1? – schnaader

+0

Tôi đã có +2 như thể bạn thêm chữ 'C' trong ví dụ của bạn vào chỉ mục (c) +1, bạn sẽ nhận được ABCCDEF xóa C cũ sẽ đưa nó trở lại ABCDEF. đưa +2 sẽ cho bạn ABCDCEF và loại bỏ giá trị cũ sẽ cho ABDCEF. Như vậy, +2 thay vì +1. Nhưng Collections.swap chính xác là những gì tôi đang tìm kiếm. –

Trả lời

37

Sử dụng phương pháp trao đổi của JDK

lớp Collections của JDK chứa một phương thức chỉ dành riêng cho mục đích này gọi là Collections.swap. Theo tài liệu API, phương pháp này cho phép bạn "trao đổi các phần tử tại các vị trí được chỉ định trong danh sách được chỉ định".

Tôi đề xuất giải pháp này để bạn không phải xóa các phần tử khỏi Danh sách và do đó bạn không phải cuộn phương thức hoán đổi của riêng mình. Ngoài ra, có vẻ như phương pháp này đã được xung quanh kể từ khi phát hành Java 1.4 nên nó sẽ làm việc cho hầu hết các JDK hiện đại.

+0

Doh. Thậm chí không thấy điều đó. Đang xóa câu trả lời của tôi ... –

+0

Tôi chỉ nhớ điều đó vì tôi đã nhìn vào nó ngày hôm nay cho dự án của tôi. Đó là một trong những góc tối của JDK. – Elijah

+0

Rất tuyệt, tôi không nghĩ mình đã từng sử dụng phương pháp đó, nhưng chắc chắn nó có thể có ích. –