Map集合的體系
集合面試過程中,對於單列集合經常會被問到List和set的區別
list集合元素有序並且集合元素可以重復
set集合元素無序並且集合元素不允許重復

有可能問道你都知道哪些常用的Map集合?
HashMap、HashTable、LinkedHashMap、ConcurrentHashMap。
Collection集合接口和Map接口有什么關系?
沒關系,Collection是List、Set父接口不是Map父接口。
HashMap是線程安全的嗎?線程安全的Map都有哪些?性能最好的是哪個?
HashMap不是線程安全的。線程安全的有HashTable、ConcurrentHashMap、SynchronizedMap,性能最好的是ConcurrentHashMap。
使用HashMap有什么性能問題嗎?
使用HashMap要注意避免集合的擴容,它會很耗性能,根據元素的數量給它一個初始大小的值。
HashMap的數據結構是怎樣的?默認大小是多少?內部是怎么擴容的?
HashMap是數組和鏈表組成的,默認大小為16,當hashmap中的元素個數超過數組大小*loadFactor(默認值為0.75)時就會把數組的大小擴展為原來的兩倍大小,然后重新計算每個元素在數組中的位置。
怎么按添加順序存儲元素?怎么按A-Z自然順序存儲元素?怎么自定義排序?
按添加順序使用LinkedHashMap,按自然順序使用TreeMap,自定義排序TreeMap(Comparetor c)。
HashMap的鏈表結構設計是用來解決什么問題的?
HashMap的鏈表結構設計是用來解決key的hash沖突問題的。
HashMap的鍵、值可以為NULL嗎?HashTable呢?
HashMap的鍵值都可以為NULL,HashTable不行。
HashMap使用對象作為key,如果hashcode相同會怎么處理?
key的hash沖突,如果key equals一致將會覆蓋值,不一致就會將值存儲在key對應的鏈表中。
HashMap中的get操作是什么原理?
先根據key的hashcode值找到對應的鏈表,再循環鏈表,根據key的hash是否相同且key的==或者equals比較操作找到對應的值。