1、----高度注意各種Map類集合Key/Value能不能存儲null值的情況
Map | Key | Value |
---|---|---|
HashMap | Nullable | Nullable |
ConcurrentHashMap | NotNull | NotNull |
TreeMap | NotNull | Nullable |
- 由于HashMap的干擾莹规,很多人認為ConcurrentHashMap是可以置入null值。同理,Set中的value實際是Map中的key窑滞。
2、----ConcurrentHashMap 使用
//RIGHT
E e = map.get(key);
if (e == null) {
e = new E();
E previous = map.putIfAbsent(key, e);
if ( previous != null) {
return previous;
}
}
return e;
- putIfAbsent 如果傳入key對應的value已經(jīng)存在,就返回存在的value哀卫,不進行替換巨坊。如果不存在,就添加key和value此改,返回null
3趾撵、----【推薦】Array 與 List互轉的正確寫法
// list -> array,構造數(shù)組時不需要設定大小
String[] array = (String[])list.toArray(); //WRONG;
String[] array = list.toArray(new String[0]); //RIGHT
String[] array = list.toArray(new String[list.size()]); //RIGHT共啃,但list.size()可用0代替占调。
// array -> list
//非原始類型數(shù)組,且List不能再擴展
List list = Arrays.asList(array);
//非原始類型數(shù)組勋磕, 但希望List能再擴展
List list = new ArrayList(array.length);
Collections.addAll(list, array);
//原始類型數(shù)組妈候,JDK8
List myList = Arrays.stream(intArray).boxed().collect(Collectors.toList());
//原始類型數(shù)組,JDK7則要自己寫個循環(huán)來加入了
4挂滓、----【強制】靜態(tài)方法不能被子類覆寫苦银。
因為它只會根據(jù)表面類型來決定調(diào)用的方法。
Base base = new Children();
// 下句實際調(diào)用的是父類的靜態(tài)方法赶站,雖然對象實例是子類的幔虏。
base.staticMethod();
5、---- BlockQueue 相關
- 從隊列添加元素的方法有:put贝椿,add想括,offer
add:若超出了度列的長度會直接<u>拋出異常</u>。
put: 若向隊尾添加元素的時候發(fā)現(xiàn)隊列已經(jīng)滿了會發(fā)生<u>阻塞</u>一直等待空間烙博,以加入元素瑟蜈。
offer:將指定元素插入此隊列中,成功時返回 true渣窜,如果當前沒有可用的空間铺根,則<u>返回 false</u>,不會拋異常
- 從隊列中取出并移除元素的方法有:poll乔宿,remove位迂,take
remove:若隊列為空,拋出NoSuchElementException<u>異常</u>详瑞。
take:若隊列為空掂林,發(fā)生<u>阻塞</u>,等待有元素坝橡。
poll: 若隊列為空泻帮,<u>返回null</u>。 poll(long timeout, TimeUnit unit) 設定等待的時間驳庭,如果在指定時間內(nèi)隊列還無值則返回null刑顺,不為空則返回隊首值
6氯窍、---- netty IntObjectHashMap
在插入時饲常,同樣把int先取模落桶蹲堂,如果遇到?jīng)_突,則不采樣HashMap的鏈地址法贝淤,而是用開放地址法(線性探測法)index+1找下一個空桶柒竞,
最后在keys[index],values[index]中分別記錄播聪。在查找時也是先落桶朽基,然后在key[index++]中逐個比較key。所以离陶,對比整個數(shù)據(jù)結構稼虎,省的不止是int vs Integer,還有每個Node的內(nèi)容招刨。
而性能嘛霎俩,IntObjectHashMap還是穩(wěn)贏一點的,隨便測了幾種場景沉眶,耗時至少都有24ms vs 28ms的樣子打却,好的時候甚至快1/3。