随笔分类 - Java基础
摘要:HashTable是一个线程安全的HashMap,是jdk早期版本的产物,但其效率较低 #1.初始化 可以看到,与HashMap不同,HashTable无参构造是默认会构造一个容量为11的数组,而HashMap在无参构造初始化时不会构造数组,只有在第一个put后才会构造容量为16的数组 #2.put
阅读全文
摘要:https://blog.csdn.net/qq_18746961/article/details/124101821
阅读全文
摘要:Condition接口也提供了类似的Object的监视器方法(wait),与Lock配合可以实现等待/通知模式。但是这两者在使用方式以及功能上还是有差别的。 最主要的区别我认为有两个: 1.Condition可以创建多个等待队列,而监视器只能有一个等待队列 2.Condition支持不响应中断 pu
阅读全文
摘要:在一次写代码中,如上操作后,我发现数组中每个位置的StringBuilder是同一个。 经过一番测试 我发现我理解错了。。。 这个Arrays.fill(sb,new StringBuildr())只会创建一个StringBuildr赋给数组所有位置,并不会每个位置赋一个新的StringBuildr
阅读全文
摘要:#主内存与工作内存 Java内存模型规定了所有的变量都存储在主内存中(物理上仅是虚拟机内存的一部分),每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用的变量的主内存副本,线程对变量的所有操作(读取,赋值等)都必须在工作内存中进行,而不能直接读写主内存中的数据,不同线程之间也无法直接访问
阅读全文
摘要:阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元
阅读全文
摘要:Java中实际上提供了java.util.Stack来实现栈结构,但官方目前已不推荐使用,而是使用java.util.Deque双端队列来实现队列与栈的各种需求.如下图所示java.util.Deque的实现子类有java.util.LinkedList和java.util.ArrayDeque.顾
阅读全文
摘要:HashSet底层是基于Hashmap实现的,不指定的话初始容量为16,负载因子0.75,其扩容什么的都是和HashMap一样的。 方法也都是调用的Hashmap方法 add()方法,把要添加的对象当做key,value是一个Object,如果对象已经存在,则返回false
阅读全文
摘要:#LinkedHashMap LinkedHashMap是一个有序的HashMap,它继承了HashMap, 其顺序有两种:按照访问的顺序和按照存储的顺序。顺序是由accessOrder字段控制,若accessOrder=true则说明是按照访问的顺序。若accessOrder=false则说明是按
阅读全文
摘要:1.扩容条件 容量不够,即需要的容量>数组的长度 2.如何扩容 新数组的容量是原数组的1.5倍,复制原数组到新数组中 3.无参构造第一次添加元素 无参构造第一次添加元素时,需要的容量是10 > 数组的长度0,扩容后容量为10
阅读全文
摘要:CopyOnWriteArrayList是并发安全的List,其底层数据的存储仍然是靠Object[],重点在于它如何实现并发安全的,还是比较简单的 1.初始化 我们可以看到其实就是创建了一个长度为0的数组 2.add元素 每次添加元素都会加锁,同时调用Arrays.copyOf方法将原数组的内容拷
阅读全文
摘要:#jdk1.7分析 ConcurrentHashMap采用 分段锁的机制,实现并发的更新操作,底层采用数组+链表的存储结构。 其包含两个核心静态内部类 Segment和HashEntry。 Segment继承ReentrantLock用来充当锁的角色,每个 Segment 对象守护每个散列映射表的若
阅读全文
摘要:#HashMap底层数据结构 #红黑树 我们都知道,jdk1.8以后 HashMap的底层是由数组+链表+红黑树组成的,那么什么是红黑树? ##二叉搜索树(二叉查找树) 我们都知道二叉树,即每个节点最多有两个子节点。 一颗无序的二叉树,如果我们要找树中的某个节点应该怎么做? 遍历树的每个节点,直到找
阅读全文
摘要:#一.概述 ##1.netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol
阅读全文
摘要:#NIO NIO:非阻塞IO ##Channel 相当于流,只不过是双向的,可以从channel中读取数据到buffer 也可以从buffer中读取数据到channel 常见的channel: FileChannel:用来作为文件的数据传输通道 DatagramChannel:用来作为UDP时数据传
阅读全文
摘要:#四种引用类型: 1.强引用: 即最常见的引用 Object o=new Object(); 比如此时 o这个对象就指向一个Object对象的强引用 如果一个对象具有强引用,那就类似于必不可少的物品,不会被垃圾回收器回收。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使
阅读全文
摘要:#线程的状态: 1.NEW(新建) 2.RUNNABLE(准备就绪) 3.BLOCKED (阻塞) 4.WAITING (不见不散) 5.TIMED_WAITING (过期不候) 6.TERMINATED (终结) #wait和sleep: 1.wait是Object类的方法 任何对象都可以调用 。
阅读全文
摘要:我们可以使用对象io流(本质是字节流)来直接向文件写入或读取对象 //写入使用ObjectOutputStream ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("employee.dat")); Person
阅读全文
摘要:Java8 中新增了Paths和Files两个工具类,用来便捷的操纵文件 ##Paths类 Path类表示的是一个目录名序列,其后还可以跟着一个文件名。Paths类示对应的工具类 //java.nio.file.Paths static Path get(String first,String ..
阅读全文
摘要:Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁
阅读全文