標籤:是什麼 動態 add 遍曆 不同 試題 set 索引值 重要性
1 同步方法和同步代碼塊的區別是什嗎?
答: 同步方法的鎖是當前類的對象,同步代碼塊的鎖可以自訂,同步方法鎖的範圍較大,對效能的影響比較大,因此代碼中盡量用同步代碼塊。
2 什麼是死結(deadlock)?
答:是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去
3 Iterator和ListIterator的區別是什嗎?
下面列出了他們的區別:
Iterator可用來遍曆Set和List集合,但是ListIterator只能用來遍曆List。
Iterator對集合只能是前向遍曆,ListIterator既可以前向也可以後向。
ListIterator實現了Iterator介面,並包含其他的功能,比如:增加元素,替換元素,擷取前一個和後一個元素的索引,等等。
4 快速失敗(fail-fast)和安全失敗(fail-safe)的區別是什嗎?
快速失敗:當你在迭代一個集合的時候,如果有另一個線程正在修改你正在訪問的那個集合時,就會拋出一個ConcurrentModification異常。
在java.util包下的都是快速失敗。安全失敗:你在迭代的時候會去底層集合做一個拷貝,所以你在修改上層集合的時候是不會受影響的,不會拋出ConcurrentModification異常。 在java.util.concurrent包下的全是安全失敗的。 5 HashMap 的工作原理 答 : HashMap的底層是用hash數組和單向鏈表實現的 ,當調用put方法是,首先計算key的hashcode,定位到合適的數組索引,然後再在該索引上的單向鏈表進行迴圈遍曆用equals比較key是否存在,如果存在則用新的value覆蓋原值,如果沒有則向後追加。 6.hashCode()和equals()方法的重要性體現在什麼地方?Java中的HashMap使用hashCode()和equals()方法來確定索引值對的索引,當根據鍵擷取值的時候也會用到這兩個方法。如果沒有正確的實現這兩個方法,兩個不同的鍵可能會有相同的hash值,因此,可能會被集合認為是相等的。而且,這兩個方法也用來發現重複元素。所以這兩個方法的實現對HashMap的精確性和正確性是至關重要的。 7.數組(Array)和列表(ArrayList)有什麼區別?什麼時候應該使用Array而不是ArrayList?
- Array可以包涵基本類型和物件類型,ArrayList只能包涵物件類型。
- Array大小是固定的,ArrayList的大小是動態變化的,
- ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
對於基礎資料型別 (Elementary Data Type),集合使用自動裝箱來減少編碼的工作量。但是當處理固定大笑的基礎資料型別 (Elementary Data Type)的時候這種方式相對比較慢。 8.ArrayList和LinkedList有什麼區別?ArrayList底層是數組,LinkedList底層是鏈表,ArrayList隨機存取速度快,LinkedList插入和刪除速度快
java 面試題