2012-04-13 8 views
7

Vì vậy, tôi muốn có một danh sách các đối tượng trong java.Làm thế nào để sắp xếp một danh sách các đối tượng java?

Tôi có object1.numberobject2.number, object3.number, vv ... nhưng những đối tượng có các thuộc tính khác ngoài number, chẳng hạn như name, distance, vv ...

Vì vậy, nếu nó đã được sắp xếp một chuỗi trong một array nó sẽ chỉ được, đặt một chuỗi trong một temporal và để cho chuỗi khác diễn ra của nó ... nhưng trong một đối tượng araryList, làm thế nào tôi có thể làm điều đó?

Tôi có thể di chuyển đối tượng đến vị trí đó của mảng không?

Cảm ơn.

+2

Liệu giáo sư của bạn muốn bạn để thực hiện các thuật toán sắp xếp cho mình? –

+0

những gì @joncarl nói là một điểm tốt, nếu như vậy bạn cần phải nhìn vào bubbleort (nó khá dễ dàng để thực hiện nhưng không quá nhanh) –

+0

Vâng, tôi sẽ thực hiện chèn alg sắp xếp. – user1253201

Trả lời

0

Bạn cần sử dụng bộ so sánh cho mục đích này.

4

Bạn cần phải thực hiện các giao diện so sánh

implements Comparable

phương pháp mà làm việc là

public int compareTo(Object obj) 
{ 
} 

Xin lưu ý đối tượng đó thường được thay thế bằng một đầy đủ về loại vì cú pháp chung có thể được sử dụng trong câu lệnh thực hiện (được hiển thị bên dưới).

Một ví dụ đầy đủ là here in the tutorial docs hy vọng điều này giúp

Một ví dụ đầy đủ (lấy từ liên kết ở trên là như sau), tôi đã thêm này chỉ trong trường hợp các liên kết đi chết tại một số điểm

import java.util.*; 

public class Name implements Comparable<Name> { 
    private final String firstName, lastName; 

    public Name(String firstName, String lastName) { 
     if (firstName == null || lastName == null) 
      throw new NullPointerException(); 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String firstName() { return firstName; } 
    public String lastName() { return lastName; } 

    public boolean equals(Object o) { 
     if (o == null || !(o instanceof Name)) 
      return false; 
     Name n = (Name) o; 
     return n.firstName.equals(firstName) && n.lastName.equals(lastName); 
    } 

    public int hashCode() { 
     return 31*firstName.hashCode() + lastName.hashCode(); 
    } 

    public String toString() { 
    return firstName + " " + lastName; 
    } 

    public int compareTo(Name n) { 
     int lastCmp = lastName.compareTo(n.lastName); 
     return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName)); 
    } 
} 

Mã khách hàng từ bài viết là:

import java.util.*; 

public class NameSort { 
    public static void main(String[] args) { 
     Name nameArray[] = { 
      new Name("John", "Smith"), 
      new Name("Karl", "Ng"), 
      new Name("Jeff", "Smith"), 
      new Name("Tom", "Rich") 
     }; 

     List<Name> names = Arrays.asList(nameArray); 
     Collections.sort(names); 
     System.out.println(names); 
    } 
} 
0

Dựa trên câu hỏi của bạn, tôi lấy nó mà bạn phải thực hiện thuật toán sắp xếp. Nếu đúng như vậy, bạn có thể điều chỉnh vị trí của các phần tử trong một ArrayList, nó chỉ hoạt động hơi khác một mảng thông thường. Hãy xem add(int index, E element). Tham số index cho phép bạn quyết định vị trí trong ArrayList để thêm phần tử.

+0

Tôi nghĩ bạn muốn hướng dẫn anh ta đến phương thức set thay vì phương thức add. phương thức thêm, trình bày các phần tử thay vì thay thế chúng. –

+0

@ColinD Không nhất thiết. Trong khi bạn có thể thay thế một phần tử với một phần tử khác, bạn cũng có thể loại bỏ một phần tử và sau đó đặt nó vào vị trí mới của nó, loại phụ thuộc một chút vào thuật toán. –

+0

Trừ khi bạn đang nhìn chằm chằm vào một mảng được sắp xếp và thêm các phần tử mới, sử dụng add() sẽ có các hình phạt hiệu suất ẩn bởi vì nó cần phải dịch chuyển tất cả các phần tử có chỉ số cao hơn. Điều tương tự cũng áp dụng cho remove(). Sử dụng set() là cách O (1) để cập nhật các mục trong mảng, đó là những gì bạn muốn để sắp xếp. –

8

Thực hiện Comparer của riêng bạn:

Arrays.sort(yourArray, new Comparator<YourClass>() { 
     @Override 
     public int compare(YourClass o1, YourClass o2) { 
      //compare object properties 
     } 
}); 
+2

Bạn có nghĩa là 'Bộ sưu tập' không phải mảng, ông đang đối phó với một 'ArrayList' ở đây? –

+0

An ArrayList là một bộ sưu tập. –

+0

Arrays.sort dành cho các mảng, như 'Object []'. Để sắp xếp một ArrayList, như đã đề cập trong câu hỏi, bạn sẽ sử dụng 'Collections.sort', như được chỉ ra bởi @Papa_Jay. – njzk2

0

Sử dụng để Collections.sort() để sắp xếp một ArrayList trong Java 8:

Collections.sort(array, new Comparator<Class>() { 
    @Override 
    public int compare(Class o1, Class o2) { 
     //compare object properties 
    } 
});