天天看點

Java面試之數組如何權衡是使用無序的數組還是有序的數組怎麼判斷數組是 null 還是為空Array 和 ArrayList有什麼差別?什麼時候應該使用Array而不是ArrayList數組和連結清單資料結構描述,各自的時間複雜度數組有沒有length()這個方法? String有沒有length()這個方法

整理了一些網上的面試經,若有不足之處,希望大佬們多多指點~

如何權衡是使用無序的數組還是有序的數組

  • 有序數組查詢容易插入難,無序資料插入容易,查詢難
  • 查找時間複雜度:有序數組O(log n),無序數組O(n)
  • 插入時間複雜度:有序數組O(n),無序數組O(1)

怎麼判斷數組是 null 還是為空

可以判斷該數組長度是否為0和它是否為null

Array 和 ArrayList有什麼差別?什麼時候應該使用Array而不是ArrayList

Array

:它是數組,申明數組的時候就要初始化并确定長度,長度不可變,而且它隻能存儲同一類型的資料,比如申明為String類型的數組,那麼它隻能存儲S聽類型資料

ArrayList

:它是一個集合,需要先申明,然後再添加資料,長度是根據内容的多少而改變的,ArrayList可以存放不同類型的資料,在存儲基本類型資料的時候要使用基本資料類型的包裝類

當能确定長度并且資料類型一緻的時候就可以用數組,其他時候使用ArrayList

數組和連結清單資料結構描述,各自的時間複雜度

數組和連結清單是兩種基本的數組結構,他們在記憶體存儲上的表現不一樣各自特點不同

  • 數組的特點:
  1. 在記憶體中,數組是一塊連續的區域
  2. 數組需要預留白間,在使用前要申請好記憶體空間,可能會造成記憶體空間的浪費
  3. 插入數組和删除數組效率低,插入數組的時候這個位置後面的數組在記憶體中都要向後移。删除資料的時候,這個資料的後面的資料都要向前面移動
  4. 随機讀取效率高,因為數組是連續的,知道每一個資料的記憶體位址,可以直接找到給位址的資料
  5. 并且不利于擴充,數組定義的空間不夠的時候要重新定義數組
  • 連結清單的特點:
  1. 在記憶體中可以存在任何地方,不要求連續
  2. 在每一個資料都儲存了下一個資料的記憶體位址,通過這個位址找到下一個資料
  3. 增加資料和删除資料很容易
  4. 查找資料的時候效率比較低,因為不具有随機通路型,是以通路某個位置的資料都要從第一個資料開始通路,然後根據第一個資料儲存的下一個資料的位址找到第二個資料,依次類推
  5. 不指定大小,擴充友善,連結清單大小不用定義,資料随意增減
  • 各自的優缺點:

數組的優點:随機通路性強、查找資料快

數組的缺點:插入和删除效率低、可能浪費記憶體、記憶體空間要求高,必須有足夠的連續記憶體空間、數組大小固定,不能動态拓展

連結清單的優點:插入和删除速度快、記憶體使用率高,不會浪費記憶體、大小沒有固定,拓展很靈活

連結清單的缺點:不能随機查找,必須要從第一個開始周遊,查找效率低、

  • 以下為數組和連結清單操作的時間複雜度
Java面試之數組如何權衡是使用無序的數組還是有序的數組怎麼判斷數組是 null 還是為空Array 和 ArrayList有什麼差別?什麼時候應該使用Array而不是ArrayList數組和連結清單資料結構描述,各自的時間複雜度數組有沒有length()這個方法? String有沒有length()這個方法

連結清單和數組個操作時間複雜度

數組有沒有length()這個方法? String有沒有length()這個方法

數組沒有length()這個方法,隻有length屬性,String有length()這個方法

備注:問題整理來源于唐尤華

當然,複習光靠這些還是不夠的,還是要多加代碼練習以及專業書籍閱讀量的,加油!