美文网首页
jvtool笔记

jvtool笔记

作者: 涂改 | 来源:发表于2019-03-30 14:47 被阅读0次
    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已经存在,就返回存在的value,不进行替换。如果不存在,就添加key和value,返回null
    3、----【推荐】Array 与 List互转的正确写法
    // list -> array,构造数组时不需要设定大小
    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
    //非原始类型数组,且List不能再扩展
    List list = Arrays.asList(array); 
    
    //非原始类型数组, 但希望List能再扩展
    List list = new ArrayList(array.length);
    Collections.addAll(list, array);
    
    //原始类型数组,JDK8
    List myList = Arrays.stream(intArray).boxed().collect(Collectors.toList());
    
    //原始类型数组,JDK7则要自己写个循环来加入了
    
    4、----【强制】静态方法不能被子类覆写。

    因为它只会根据表面类型来决定调用的方法。

    Base base = new Children();

    // 下句实际调用的是父类的静态方法,虽然对象实例是子类的。
    base.staticMethod();

    5、---- BlockQueue 相关
    • 从队列添加元素的方法有:put,add,offer

    add:若超出了度列的长度会直接<u>抛出异常</u>。
    put: 若向队尾添加元素的时候发现队列已经满了会发生<u>阻塞</u>一直等待空间,以加入元素。
    offer:将指定元素插入此队列中,成功时返回 true,如果当前没有可用的空间,则<u>返回 false</u>,不会抛异常

    • 从队列中取出并移除元素的方法有:poll,remove,take

    remove:若队列为空,抛出NoSuchElementException<u>异常</u>。
    take:若队列为空,发生<u>阻塞</u>,等待有元素。
    poll: 若队列为空,<u>返回null</u>。 poll(long timeout, TimeUnit unit) 设定等待的时间,如果在指定时间内队列还无值则返回null,不为空则返回队首值

    6、---- netty IntObjectHashMap

    在插入时,同样把int先取模落桶,如果遇到冲突,则不采样HashMap的链地址法,而是用开放地址法(线性探测法)index+1找下一个空桶,
    最后在keys[index],values[index]中分别记录。在查找时也是先落桶,然后在key[index++]中逐个比较key。

    所以,对比整个数据结构,省的不止是int vs Integer,还有每个Node的内容。
    而性能嘛,IntObjectHashMap还是稳赢一点的,随便测了几种场景,耗时至少都有24ms vs 28ms的样子,好的时候甚至快1/3。

    相关文章

      网友评论

          本文标题:jvtool笔记

          本文链接:https://www.haomeiwen.com/subject/jtajbqtx.html