JAVA容器之List

1.JAVA容器

        容器,是指一系列數據結構和算法的集合;在容器內部,提供了範型的數據結構和算法,從而爲讓不同數據類型的同一算法得以實現。在具體的算法實現的時候,是需要考慮不同數據結構的影響的,因爲不同的數據結構會影響同一算法的時間複雜度和空間複雜度;但容器的最終目的是提供算法接口,而讓軟件工程師只用瞭解算法的實現,而不需要再重複造輪子而實現算法。從工程性的角度來說,容器的作用非常明顯。而對軟件工程師來說,是否瞭解和深入領會容器,是區分一個軟件工程師技術深度是否足夠的重要依據。

       不同語言實現了不同的容器,如C++ 98的STL,C++ 11的STL(做了Hash的擴展);本文討論的主要是JAVA的容器。

        JAVA容器對比於C++的不同之處是(因爲JAVA本身是借鑑了C++的思想而發展起來的,筆者又是C出身):

         1)相比於C++,JAVA是一種純粹的面嚮對象語言,這讓JAVA的編程依託於接口編程,而不是再思考過程實現;所以,JAVA容器本身按接口分爲Colletion和Map兩大類,然後,在這兩大類接口之下進行實現和擴展;而C++本身的容器,則是單個區分的,不具有純粹的接口編程思想。

       2)C++語言是C語言的擴展,C語言是一種很古老的語言,現如今的Kernel大部分都是C語言實現的;在C語言興起的時候,計算機發展還很不完善,計算機本身也沒有太多進程和線程的概念,而只是不同操作系統支持多進程和多線程;這導致C語言的擴展C++語言,在一開始設計的時候,沒有對多線程和多進程進行支持。在C++98的STL中,根本沒有線程安全這一說。而JAVA則在計算機發展之後,並自己建立了自己的語言支持平臺——JVM;這讓JAVA很容易支持多線程和多進程,很多容器是線程安全或者很容易實現線程安全。

       JAVA容器的類型如圖所示(來源於百度百科):

       

2.JAVA容器之List

       JAVA容器主要分類兩大類:Collection和Map。其中Collection對外提供單一值的結構,Map則提供鍵值對的結構。

       Collection又分爲List和Set。其中List是順序的,可以有重複值的線性表;Set可以是順序的,但主要是指無重複值的集合。

       值得再次注意的是List和Set本身,是一個接口概念,而不是實際的抽象結構。所以,List接口,有具體的實現。

3.JAVA容器List的兩種分類
      數據結構中,對線性表的存儲的分類,一般分爲兩類:連續塊狀存儲和鏈式存儲。

      連續塊狀存儲和鏈式存儲的區分在於:塊狀存儲在內存上一整塊,而鏈式存儲則是不連續,通過指針(JAVA沒有指針概念,那就是鏈接地址)鏈接存儲的。

      在C++中,這一般爲數組類型存儲和鏈表式存儲。在C++的STL裏面,vector和list的區分,是許多面試中的考點之一。

      在JAVA中,塊狀存儲和鏈式存儲的線性表分別爲ArrayList和LinkedList。

      根據數據結構的區分,ArrayList和LinkedList的區分如下:

      1)ArrayList方便直接尋值,但插入值和刪除值通常會耗費更大的時間和空間;

      2)LinkedList方便插入值和刪除值,但不方便查找,因爲查找值通常需要從頭到尾查找。

4.List的主要方法

       JAVA中,List接口的主要用法是:

      1)add;

      2)remove;

      3)get;

      4)set。      

5.迭代器訪問

       通過迭代器訪問,是對容器訪問的一種比較好的方法。因爲,迭代器給實際的容器構成提供了一個抽象隔離層;這樣,對容器的實現和訪問將會分開,從而讓程序具有更小的耦合性。迭代模式,本身也是設計模式的之一。

        在C++中,迭代器一開始做得並不好。在C++98中,STL的迭代器只有前向迭代器;最C++98之前的語法中,迭代器都被認爲是一種指針;C++的迭代器也完全採用了指針的類似語法;用++表示訪問下一個,用*表示尋找內容。

        而在JAVA中,迭代器作爲接口和類實現。所有容器都有Iterator支持,同時hasNext()方法作爲判斷是否有迭代元素的接口,next()方法則返回迭代結點,並讓迭代器指向下一個元素。

6.小結與雜感

 總結如下:

1)容器是軟件工程師的必備利器,必須認真學習;

2)JAVA語言的設計思路和C++有一定區別,注意學習不同語言的差異性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章