Android面試

1.說一下arrayList和linkedList的區(qū)別。一臉懵逼,雖然在看數(shù)據(jù)結構。

總體來說,Vector和ArrayList是一致的,實現(xiàn)的接口也是完全一樣,內部的存儲結構也基本一致【都是數(shù)組】,每個方法的實現(xiàn)也幾乎相同。

區(qū)別在于,Vector是線程安全的,每個方法都加了synchronized修飾符,而ArrayList沒有。

而且Vector是JDK1.0引入的,而ArrayList是JDK1.2引入的。


再來說ArrayList和LinkedList的區(qū)別,上面說過ArrayList內部是數(shù)組實現(xiàn)的,LinkedList內部是鏈表實現(xiàn)的。

因此,當遇到讀取比較多,插入、刪除比較少的時候,推薦使用ArrayList,畢竟數(shù)組讀取速度飛快,插入刪除速度需要移動大量元素;而當遇到插入刪除比較多的時候,推薦使用LinkedList。


在Java集合工具類Collections中,提供了一個Collections.synchronizedList方法,可以傳入一個List對象,返回出一個SynchronizedList。SynchronizedList只是提供了一個對List對象的封裝,對List的每個操作都添加了synchronized修飾,基本上與Vector一致,只是用法不同而已。比如現(xiàn)在已經(jīng)有個LinkedList,如果想要一個線程安全的List,只需執(zhí)行Collections.synchronized(linkedList)即可,沒有任何的元素拷貝操作,此時,如果用Vector實現(xiàn),則必須遍歷LinkedList,將其中的每一個元素拷貝到Vector中。

2.那hashMap和linkedHashMap的區(qū)別呢。

HashMap是一個最常用的Map,它根據(jù)鍵的hashCode值存儲數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,有很快的訪問速度。HashMap最多只允許一條記錄的鍵為null,允許多條記錄的值為null。HashMap不支持線程同步,即任一時刻可以有多個線程同時寫HashMap,可能會導致數(shù)據(jù)的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。

Hashtable與HashMap類似,不同的是:它不允許記錄的鍵或者值為空;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導致了Hashtable在寫入時會比較慢。

LinkedHashMap保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的。

在遍歷的時候會比HashMap慢TreeMap能夠把它保存的記錄根據(jù)鍵排序,默認是按升序排序,也可以指定排序的比較器。當用Iterator遍歷TreeMap時,得到的記錄是排過序的。

3.設計模式,你常用的有哪些,場景。setOnclickListener算是那種模式。

單例模式,工廠模式,觀察者模式;setOnclickListener算是觀察者模式

4.布局的優(yōu)化。

4.加載圖片的優(yōu)化。

5.架構設計。

6.網(wǎng)絡請求框架。

7.activity四種啟動模式。

8.MVP模式的優(yōu)化。

9.自定義view,內切圓還是外切圓。

10.handler機制。

11.觀察者模式。

12.scrollview嵌套listview為什么listview就顯示一行,怎么解決滑動沖突。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容