簡體   English   中英

為什么我不能在ArrayList上調用Collections.sort() <T> ?

[英]Why can't I call Collections.sort() on my ArrayList<T>?

對於可能會有這樣問題的任何人,您可能需要“ Collections.sort”,而不是“ Collection.sort”,這是我在下面犯的錯誤。

我定義了一個類,定義為

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

我在另一個類中有一個字段定義為:

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

我想對這個集合進行排序,因此在一種方法中我稱之為:

Collection.sort(fStores);

但是,我收到以下編譯錯誤:

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

ArrayList實現List,並從文檔中實現:

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

那么,為什么會出現錯誤? 我也嘗試過創建自己的Comparator后代,並將其傳遞給sort方法,但沒有運氣。

我猜有些關於“ <T擴展Comparable <?超級T>>”我不明白...?

您基本上需要注意兩件事:

館藏

來自收藏

此類僅包含對集合進行操作或返回集合的靜態方法。 它包含對集合進行操作的多態算法,“包裝器”,它們返回由指定集合支持的新集合,以及其他幾率

因此,基本上,如果您必須排序或執行任何此類算法,請使用此方法。

接下來是:->

采集

這是提供Java收集框架基礎的接口。 它不包括地圖和已排序地圖。 它代表一組稱為其元素的對象,並具有用於具體實現的實現。 當您要使用ArrayLists和Maps時,需要考慮這一點。

因此,最重要的是,您有一個要運行的靜態算法,該算法存在於Collections中。 因此,請使用Collections.sort

您需要編寫Collections而不是Collection 它們是相關的,但有所不同。 :-)

如果由於類似的錯誤而到達這里:

對於類型List <...>,未定義方法sort(Comparator <...>)

那么您可能正在使用低於1.8的JDK 在Java構建路徑中進行更改:

在此處輸入圖片說明

您是說Collections.sort() (集合復數)嗎?

是帶有s的Collections.sort()

import java.util.Collections可以了。

您的問題是您正在調用Collection.sort() ,而不是Collections.sort()

這是兩個單獨的類:

館藏

采集

集合是一個接口,而集合是一個實用程序類。

另外,如果您使用的是eclipse,請再次檢查Collections的import語句是否正確!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM