美文网首页
Java重点难点一句话总结

Java重点难点一句话总结

作者: Fitz_Lee | 来源:发表于2018-07-27 17:59 被阅读37次

常用的几种单例模式

懒加载线程安全
public class Manager {
    private Manager instance = null;

    Manager getIntance() {
        if (instance == null) {
            sycnronize (this) {
                if (instance == null) {
                    instance = new Manager();
                    return instance;
                }
            }
        }
        return instance;
        
    }

    private Manager(){
    }

}

饿汉模式
public class Manager {
    private static final Manager instance = new Manager();
    private Manager(){
    }

    public static void getInstance() {
        return instance;
    }

}

懒汉模式
public class Manager {
    private Manager(){
    }

    public static void getInstance() {
        return SingletonHolder.instance;
    }

    private static class SingletonHolder {
        public static final Manager instance = new Manager();
    }

}

生产者消费者模式

  • semapore实现
    https://blog.csdn.net/mm_bit/article/details/50010623
    // 非满锁
    final Semaphore notFull = new Semaphore(10);
    // 非空锁
    final Semaphore notEmpty = new Semaphore(0);
    // 核心锁
    final Semaphore mutex = new Semaphore(1);

  • blockingqueue无需同步锁
    https://www.cnblogs.com/fankongkong/p/7339848.html
    private BlockingQueue resourceQueue = new LinkedBlockingQueue(10);
    resourceQueue.put(1);
    resourceQueue.take();

  • lock/condition/await/signalAll
    核心防冲突锁 Lock lock = new ReentrantLock();
    是否满的条件 Condition producerCondition = lock.newCondition();
    非空的条件 ondition consumerCondition = lock.newCondition();

HashMap的内部结构? 内部原理?

https://www.cnblogs.com/stevenczp/p/7028071.html
JDK1.7中

使用一个Entry数组来存储数据,用key的hashcode取模来决定key会被放到数组里的位置,如果hashcode相同,或者hashcode取模后的结果相同(hash collision),那么这些key会被定位到Entry数组的同一个格子里,这些key会形成一个链表。
在hashcode特别差的情况下,比方说所有key的hashcode都相同,这个链表可能会很长,那么put/get操作都可能需要遍历这个链表
也就是说时间复杂度在最差情况下会退化到O(n)

JDK1.8中
使用一个Node数组来存储数据,但这个Node可能是链表结构,也可能是红黑树结构
如果插入的key的hashcode相同,那么这些key也会被定位到Node数组的同一个格子里。
如果同一个格子里的key不超过8个,使用链表结构存储。
如果超过了8个,那么会调用treeifyBin函数,将链表转换为红黑树。
那么即使hashcode完全相同,由于红黑树的特点,查找某个特定元素,也只需要O(log n)的开销
也就是说put/get的操作的时间复杂度最差只有O(log n)

相关文章

  • Java重点难点一句话总结

    常用的几种单例模式 生产者消费者模式 semapore实现https://blog.csdn.net/mm_bit...

  • 小升初重点难点大总结

    六年级,已经离初一不远了。很多小学生都会在这个年级里纠结:小学毕业后,选哪一所初中去上好;哪一所初中比较适合...

  • Kotlin基本篇-彻底理解匿名函数和高阶函数

    Kotlin 总结分享 如果用一句话总结kotlin,那么就是:更好的java类型申明 为什么采用这种风格? 代码...

  • Python实战计划爬虫作业1_3: 爬租房信息

    作业要求 我的代码 总结 本次作业就是BeautifulSoup的练习,模式就是一个套路。重点难点在于,页面上每一...

  • C语言重点难点总结

    int niao=10; intdaNiao = ++niao;/intdaNiao = niao++; //++...

  • Java面试题汇总

    Java面试题总结 Java面试题总结一Java面试题总结二

  • java反射总结

    一、定义 如果让我用一句话总结一下java反射机制的话,我会说反射就是把java类中的各种成分映射成相应的Java...

  • 课后随笔:整理笔记

    记笔记要记什么? 记知识结构,记思维脉络,记延伸拓展,记重点难点,记总结心得。 半个小时,一个单元的知识,整理并绘...

  • Java 类型总结

    title: Java Type 总结date: 2022/06/24 16:44 Java 类型总结 Type及...

  • 书法篆隶楷行草五体心得

    一、篆书。 ♀大篆。重点难点是掌握金石气的线条。可以用少墨、小笔、动作训练。 ♀小篆。重点难点是铁线。难在圆转得干...

网友评论

      本文标题:Java重点难点一句话总结

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