1. 程式人生 > >資料結構與集合篇一些常用的資料結構和集合 面試常問部分(一)

資料結構與集合篇一些常用的資料結構和集合 面試常問部分(一)

java有8種之多,但是不用害怕事實上常用的資料結構也就那麼幾種,

常用的也就是雜湊表,向量,Properties,集合框架,棧(關於資料結構,我寫的不是很細,因為最近小編在準備求職,等小編有空會準備詳細程式碼來進行講解)

  • 棧 在面試中棧經常與佇列一起出題。
  1. 棧/佇列 線性儲存結構。棧先進後出,佇列,先進先出。
  2. 棧:只能在入棧出棧口(同一口)進行操作
  3. 佇列:只能在表的一端進行插入和在另一端進行刪除操作(即在入隊 口插入,出隊口刪除)!!!!
  4. 用途:

棧:可以顛倒資料串的次序、為回溯演算法提供支援、實現自動機

佇列:共享印表機,訊息佇列

二、常用類的區別

1.ArrayList: 元素單個,效率高,多用於查詢 
2.Vector: 元素單個,執行緒安全,多用於查詢 
3.LinkedList:元素單個,多用於插入和刪除 
4.HashMap: 元素成對,元素可為空 
5.HashTable: 元素成對,執行緒安全,元素不可為空 一、幾個常用類的區別 
1.ArrayList: 元素單個,效率高,多用於查詢 
2.Vector: 元素單個,執行緒安全,多用於查詢 
3.LinkedList:元素單個,多用於插入和刪除 
4.HashMap: 元素成對,元素可為空 
5.HashTable: 元素成對,執行緒安全,元素不可為空 

二、這樣講過於籠統我們來分析分析面試經常問的這些個資料結構細節講解

1.ArrayList 原始碼分析(阿里面試)

最重要的也就是 ArrayList的初始容量為10,一次增幅1.5

詳情請見連結:

2. Vector和ArrayList的區別:

   (1)Vector方法同步,意味著執行緒安全;而ArrayList執行緒不同步,意味著執行緒不安全。  顯而易見,ArrayList效率效能方面比較高。

   (2)Vector和ArrayList兩者初始容量都是10,但是增幅不同。

        Vector翻倍,ArrayList為1.5.

3.HashMap和HashTable的區別*:

   (1)首先知道HashMap的都知道,效率高,所以執行緒不同步

        HashTable剛好相反。

   (2)從繼承體系來看 HashMap繼承自AbstractMap類,

HashTable繼承自Dictionary類

  1. ArrayList與LinkedList的區別

1.ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。

2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。

3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。

簡單來說也就是,

ArrayList基於動態陣列,LinedList基於連結串列。

隨機查詢修改前者,正常刪除,新增用連結串列。

4.陣列和ArrayList區別 阿里問過

 這個問題很簡單,兩者最大的區別的就是:

陣列長度固定,ArrayList長度可變,但陣列更加高效,

這樣的原因是有很有意思:

       正是因為ArrayList可以擴容,他每次擴容前都會

每當執行Add、AddRange、Insert、InsertRange等新增元素的方法,用來確定是否容量不夠,如果不夠,以當前容量的1.5倍來重新構建一個數組,將舊元素Copy到新陣列中,然後丟棄舊陣列,相當影響效率的呀。

所以一般使用陣列,無法確定陣列大小時才使用ArrayList!

 下一篇就著重介紹HashMap原始碼了

HashMap原始碼阿里面試必備一定會問!!!