2012-03-06 36 views
5

Đối với bất kỳ ai có câu hỏi như thế này, bạn có thể cần "Collections.sort", không phải "Collection.sort", sai lầm tôi đã thực hiện bên dưới.Tại sao tôi không thể gọi Collections.sort() trên ArrayList <T> của mình?

tôi đã xác định một lớp định nghĩa là

public class Store implements Serializable, Comparable<Store> { ... } 

Tôi có một lĩnh vực trong lớp khác định nghĩa là:

ArrayList<Store> fStores = new ArrayList<Store>(); 

Tôi muốn sắp xếp bộ sưu tập này, vì vậy trong một phương pháp mà tôi gọi:

Collection.sort(fStores); 

Tuy nhiên, tôi gặp lỗi biên dịch sau:

The method sort(ArrayList<Store>) is undefined for the type Collection 

ArrayList thực hiện List, và từ các tài liệu:

public static <T extends Comparable<? super T>> void sort(List<T> list) 

Vì vậy, tại sao tôi nhận được thông báo lỗi? Tôi cũng đã cố gắng tạo ra hậu duệ của riêng tôi của Comparator và chuyển nó đến phương thức sắp xếp mà không có may mắn.

Tôi đoán có điều gì đó về "< T mở rộng So sánh <? Super T>>" Tôi không hiểu ...?

+1

Không phải là nó 'Collections.sort()', không phải 'Collection.sort()'? –

+1

Bộ sưu tập là một lỗi đánh máy? Tôi nghĩ bạn có nghĩa là 'Bộ sưu tập' –

Trả lời

7

Về cơ bản có 2 điều mà bạn cần phải xem xét:

Collections

Từ Collections

This class consists exclusively of static methods that operate on or return collections. It contains polymorphic algorithms that operate on collections, "wrappers", which return a new collection backed by a specified collection, and a few other odds and ends

Vì vậy, về cơ bản nếu bạn có để sắp xếp hoặc làm bất kỳ loại thuật toán như vậy sử dụng này.

Tiếp theo là: ->

Collection

Đây là một giao diện mà cung cấp cơ sở khuôn khổ bộ sưu tập Java. Nó không bao gồm Bản đồ và Bản đồ được sắp xếp. Nó đại diện cho một nhóm các đối tượng được gọi là các phần tử của nó và có các triển khai thực hiện cụ thể. Bạn cần phải suy nghĩ về điều này khi bạn muốn làm việc với ArrayLists và Maps.

Vì vậy, dòng dưới cùng, bạn có một thuật toán tĩnh để chạy có trong Bộ sưu tập. Vì vậy, hãy sử dụng Collections.sort

1

Ý của bạn là Collections.sort() (bộ sưu tập số nhiều)?

1

vấn đề của bạn là bạn đang gọi Collection.sort(), không Collections.sort()

Đây là hai lớp riêng biệt:

Collections

Collection

Bộ sưu tập là một giao diện trong khi bộ sưu tập là một lớp tiện ích.

+0

Bingo! Cảm ơn đã trả lời nhanh chóng. – Steve

+1

@Steve Chắc chắn rồi. Rất vui được trợ giúp: D –

0

Ngoài ra, nếu bạn đang sử dụng nhật thực, hãy kiểm tra kỹ xem câu nhập khẩu cho Bộ sưu tập có đúng không!

1

Trong trường hợp bạn đã ở đây do một lỗi tương tự:

The method sort(Comparator<...>) is undefined for the type List<...>

Sau đó, có lẽ bạn đang sử dụng JDK thấp sau đó 1,8. Thay đổi nó trong Java Build Path:

enter image description here

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