1.說一下arrayList和linkedList的區(qū)別浙宜。一臉懵逼,雖然在看數(shù)據(jù)結(jié)構(gòu)炕贵。
總體來說梆奈,Vector和ArrayList是一致的,實現(xiàn)的接口也是完全一樣称开,內(nèi)部的存儲結(jié)構(gòu)也基本一致【都是數(shù)組】亩钟,每個方法的實現(xiàn)也幾乎相同。
區(qū)別在于鳖轰,Vector是線程安全的清酥,每個方法都加了synchronized修飾符,而ArrayList沒有蕴侣。
而且Vector是JDK1.0引入的焰轻,而ArrayList是JDK1.2引入的。
再來說ArrayList和LinkedList的區(qū)別昆雀,上面說過ArrayList內(nèi)部是數(shù)組實現(xiàn)的辱志,LinkedList內(nèi)部是鏈表實現(xiàn)的。
因此狞膘,當(dāng)遇到讀取比較多揩懒,插入、刪除比較少的時候挽封,推薦使用ArrayList已球,畢竟數(shù)組讀取速度飛快,插入刪除速度需要移動大量元素;而當(dāng)遇到插入刪除比較多的時候智亮,推薦使用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,可能會導(dǎo)致數(shù)據(jù)的不一致性国夜。如果需要同步减噪,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。
Hashtable與HashMap類似车吹,不同的是:它不允許記錄的鍵或者值為空筹裕;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable窄驹,因此也導(dǎo)致了Hashtable在寫入時會比較慢饶碘。
LinkedHashMap保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時馒吴,先得到的記錄肯定是先插入的。
在遍歷的時候會比HashMap慢TreeMap能夠把它保存的記錄根據(jù)鍵排序,默認是按升序排序饮戳,也可以指定排序的比較器豪治。當(dāng)用Iterator遍歷TreeMap時,得到的記錄是排過序的扯罐。
3.設(shè)計模式负拟,你常用的有哪些,場景歹河。setOnclickListener算是那種模式掩浙。
單例模式,工廠模式秸歧,觀察者模式厨姚;setOnclickListener算是觀察者模式