当这些对象存入 HashMap 时,功用就会十分低,由于 HashMap 是经过 HashCode 定位到 Hash 槽,有抵触的时分,才会运用链表或许红黑树组织节点,固定地前往 0,相当于把 Hash 寻址功用有效了。
HashMap等集合初始化的时分,指定初始值大小这样的对象有很多,比如 ArrayList,StringBuilder 等,经过指定初始值大小可增加扩容形成的功用损耗。
初始值大小计算可以参考《阿里巴巴开发手册》:
循环内不要不断创立对象援用//反例
for (int i = 1; i <= size; i++) {
Object obj = new Object();
}
//正例
Object obj = null;
for (int i = 0; i <= size; i++) {
obj = new Object();
}
第一种会招致内存中有size个Object对象援用存在,size很大的话,就消耗内存了
遍历Map 的时分,运用 EntrySet 办法运用 EntrySet 办法,可以直接前往 set 对象,直接睦龃用即可;而运用 KeySet 办法,取得的是key 的集合,需求再停止一次 get 操作,多了一个操作步骤,所以更引荐运用 EntrySet 方式遍历 Map。
Set<Map.Entry<String, String>> entryseSet = nmap.entrySet();
for (Map.Entry<String, String> entry : entryseSet) {
System.out.println(entry.getKey()+","+entry.getValue());
}
不要在多线程下运用同一个 RandomRandom 类的 seed 会在并发拜访的状况下发作竞争,形成功用降低,建议在多线程环境下运用 ThreadLocalRandom 类。
public static void main(String[] args) {
ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current();
Thread thread1 = new Thread(()->{
for (int i=0;i<10;i++){
(责任编辑:admin)