卷妹帶你回顧Java基礎每日更新Day12
👩💻部落格首頁:京與舊鋪的部落格首頁
✨歡迎關注🖱點贊🎀收藏⭐留言✒
🔮本文由京與舊鋪原創
😘系列專欄:java學習
👕參考網站:牛客網
💻首發時間:🎞2022年8月22日🎠
🎨你做三四月的事,八九月就會有答案,一起加油吧
🀄如果覺得部落客的文章還不錯的話,請三連支援一下部落客哦
🎧最後的話,作者是一個新人,在很多方面還做的不好,歡迎大佬指正,一起學習哦,沖沖沖
💬推薦一款模拟面試、刷題神器👉點選進入網站
🛒導航小助手🎪
文章目錄
- 卷妹帶你回顧Java基礎每日更新Day12
- 🛒導航小助手🎪
多線程場景下如何使用
ArrayList**?**
ArrayList 不是線程安全的,如果遇到多線程場景,可以通過 Collections 的
synchronizedList 方法将其轉換成線程安全的容器後再使用。例如像下面這樣:
為什麼 ArrayList 的 elementData 加上 transient 修飾? ArrayList 中的數組定
義如下:
再看一下 ArrayList 的定義:
可以看到 ArrayList 實作了 Serializable 接口,這意味着 ArrayList 支援序列
化。transient 的作用是說不希望 elementData 數組被序列化,重寫了 writeObject 實作:
每次序列化時,先調用 defaultWriteObject() 方法序列化 ArrayList 中的非transient 元素,然後周遊
elementData,隻序列化已存入的元素,這樣既加快了序列化的速度,又減小了序列化之後的檔案大
小。
List 和 Set 的差別
List , Set 都是繼承自Collection 接口
List 特點:一個有序(元素存入集合的順序和取出的順序一緻)容器,元素可以重複,可以插入多個null
元素,元素都有索引。
Set 特點:一個無序(存入和取出順序有可能不一緻)容器,不可以存儲重複元素,隻允許存入一個null
元素,必須保證元素唯一性。Set 接口常用實作類是
HashSet、LinkedHashSet 以及 TreeSet。
另外 List 支援for循環,也就是通過下标來周遊,也可以用疊代器,但是set隻能用疊代,因為他無序,
無法用下标來取得想要的值。
Set和List對比
Set:檢索元素效率低下,删除和插入效率高,插入和删除不會引起元素位置改變。
List:和數組類似,List可以動态增長,查找元素效率高,插入删除元素效率低,因為會引起其他元素位
置改變
Set****接口
說一下 HashSet 的實作原理?
HashSet 是基于 HashMap 實作的,HashSet的值存放于HashMap的key上,HashMap的value統一為
PRESENT,是以 HashSet 的實作比較簡單,相關 HashSet 的操作,基本上都是直接調用底層
HashMap 的相關方法來完成,HashSet 不允許重複的值。
HashSet****如何檢查重複?HashSet是如何保證資料不可重複的?
向HashSet 中add ()元素時,判斷元素是否存在的依據,不僅要比較hash值,同時還要結合equles 方法
比較。
HashSet 中的add ()方法會使用HashMap 的put()方法。
HashMap 的 key 是唯一的,由源碼可以看出 HashSet 添加進去的值就是作為 HashMap 的key,并且