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算是觀察者模式