整理了一些網上的面試經,若有不足之處,希望大佬們多多指點~
如何權衡是使用無序的數組還是有序的數組
- 有序數組查詢容易插入難,無序資料插入容易,查詢難
- 查找時間複雜度:有序數組O(log n),無序數組O(n)
- 插入時間複雜度:有序數組O(n),無序數組O(1)
怎麼判斷數組是 null 還是為空
可以判斷該數組長度是否為0和它是否為null
Array 和 ArrayList有什麼差別?什麼時候應該使用Array而不是ArrayList
Array
:它是數組,申明數組的時候就要初始化并确定長度,長度不可變,而且它隻能存儲同一類型的資料,比如申明為String類型的數組,那麼它隻能存儲S聽類型資料
ArrayList
:它是一個集合,需要先申明,然後再添加資料,長度是根據内容的多少而改變的,ArrayList可以存放不同類型的資料,在存儲基本類型資料的時候要使用基本資料類型的包裝類
當能确定長度并且資料類型一緻的時候就可以用數組,其他時候使用ArrayList
數組和連結清單資料結構描述,各自的時間複雜度
數組和連結清單是兩種基本的數組結構,他們在記憶體存儲上的表現不一樣各自特點不同
- 數組的特點:
- 在記憶體中,數組是一塊連續的區域
- 數組需要預留白間,在使用前要申請好記憶體空間,可能會造成記憶體空間的浪費
- 插入數組和删除數組效率低,插入數組的時候這個位置後面的數組在記憶體中都要向後移。删除資料的時候,這個資料的後面的資料都要向前面移動
- 随機讀取效率高,因為數組是連續的,知道每一個資料的記憶體位址,可以直接找到給位址的資料
- 并且不利于擴充,數組定義的空間不夠的時候要重新定義數組
- 連結清單的特點:
- 在記憶體中可以存在任何地方,不要求連續
- 在每一個資料都儲存了下一個資料的記憶體位址,通過這個位址找到下一個資料
- 增加資料和删除資料很容易
- 查找資料的時候效率比較低,因為不具有随機通路型,是以通路某個位置的資料都要從第一個資料開始通路,然後根據第一個資料儲存的下一個資料的位址找到第二個資料,依次類推
- 不指定大小,擴充友善,連結清單大小不用定義,資料随意增減
- 各自的優缺點:
數組的優點:随機通路性強、查找資料快
數組的缺點:插入和删除效率低、可能浪費記憶體、記憶體空間要求高,必須有足夠的連續記憶體空間、數組大小固定,不能動态拓展
連結清單的優點:插入和删除速度快、記憶體使用率高,不會浪費記憶體、大小沒有固定,拓展很靈活
連結清單的缺點:不能随機查找,必須要從第一個開始周遊,查找效率低、
- 以下為數組和連結清單操作的時間複雜度
連結清單和數組個操作時間複雜度
數組有沒有length()這個方法? String有沒有length()這個方法
數組沒有length()這個方法,隻有length屬性,String有length()這個方法
備注:問題整理來源于唐尤華
當然,複習光靠這些還是不夠的,還是要多加代碼練習以及專業書籍閱讀量的,加油!