當前位置:編程學習大全網 - 編程語言 - java聲明問題:List<String> list=new ArrayList<String>();為甚_要聲明為List 而不是ArrayList<String>?

java聲明問題:List<String> list=new ArrayList<String>();為甚_要聲明為List 而不是ArrayList<String>?

List是集合最大的父類,它包含了ArrayList。

如果直接聲明為ArrayList<String> list=new ArrayList<String>()這個也沒有問題。

而聲明成:List<String> list=new ArrayList<String>();這樣的形式使得list這個對象可以有多種的存在形式,比如要用鏈表存數據的話直接用LinkedList,使用ArrayList或者Vector直接通過list去=就可以了,這樣讓list這個對象活起來了,“有甚_大問題呢?只不過是多壹行code而已。”

其實不止多壹行代碼,很多需求只能用壹個list,內存有限,或者線程同步,不能有更多的集合對象,使得List總的接口來管理對象。

擴展資料:

在編程語言中List 是標準類庫中的壹個類,可以簡單視之為雙向鏈表,以線性列的方式管理物件集合。list 的特色是在集合的任何位置增加或刪除元素都很快,但是不支持隨機存取。

list 是類庫提供的眾多容器(container)之壹,除此之外還有vector、set、map、?等等。list 以模板方式實現(即泛型),可以處理任意型別的變量。

包括使用者自定義的資料型態例如:它可以是壹個放置整數(int)型態的 list、也可以是放置字串(char 或 string)型態的 list、或者放置使用者自定類別(user-defined class)的 list。

有序的?collection(也稱為序列)。此接口的用戶可以對列表中每個元素的插入位置進行精確地控制。用戶可以根據元素的整數索引(在列表中的位置)訪問元素,並搜索列表中的元素。

與vector的區別

參考list是雙向循環鏈表,,每壹個元素都知道前面壹個元素和後面壹個元素。在STL中,list和vector壹樣,是兩個常被使用的容器。和vector不壹樣的是,list不支持對元素的任意存取。

list中提供的成員函數與vector類似,不過list提供對表首元素的操作push_front、pop_front,這是vector不具備的。

和vector另壹點不同的是,list的叠代器不會存在失效的情況,他不像vector會保留備份空間,在超過容量額度時重新全部分配內存,導致叠代器失效;list沒有備份空間的概念,出入壹個元素就申請壹個元素的空間,所以它的叠代器不會失效。

與 set 不同,列表通常允許重復的元素。更確切地講,列表通常允許滿足 e1.equals(e2) 的元素對 e1 和 e2,並且如果列表本身允許?null?元素的話,通常它們允許多個 null 元素。難免有人希望通過在用戶嘗試插入重復元素時拋出運行時異常的方法來禁止重復的列表,但我們希望這種用法越少越好。

List?接口在?iterator、add、remove、equals 和 hashCode 方法的協定上加了壹些其他約定,超過了 Collection 接口中指定的約定。為方便起見,這裏也包括了其他繼承方法的聲明。

List 接口提供了 4 種對列表元素進行定位(索引)訪問方法。列表(像 Java?數組壹樣)是基於 0 的。註意,這些操作可能在和某些實現(例如 LinkedList 類)的索引值成比例的時間內執行。因此,如果調用者不知道實現,那麽在列表元素上叠代通常優於用索引遍歷列表。

List 接口提供了特殊的叠代器,稱為?ListIterator,除了允許 Iterator 接口提供的正常操作外,該叠代器還允許元素插入和替換,以及雙向訪問。還提供了壹個方法來獲取從列表中指定位置開始的列表叠代器。

List?接口提供了兩種搜索指定對象的方法。從性能的觀點來看,應該小心使用這些方法。在很多實現中,它們將執行高開銷的線性搜索。

List 接口提供了兩種在列表的任意位置高效插入和移除多個元素的方法。

百度百科--java接口

百度百科--list

  • 上一篇:超人可視化編程
  • 下一篇:宿遷少兒編程班
  • copyright 2024編程學習大全網