
Java基础
文章平均质量分 67
汤坤Sunshine
微笑人生~
展开
-
HashMap源码和原理
HashMapsizethresholdsizethresholdloadFactor单链表NodehashkeyvalueHashMap源码中iHashMap源码中方法剖析keyhashhashtable[]1indexindextable[]hashkeyNodeNodevalueHashMap源码中resize()putresize()tablethreshold0sizethresholdresize()threshold2table2数组中的每个元素Node都是单链表的表头。原创 2023-05-13 13:45:45 · 601 阅读 · 0 评论 -
链表LinkedList和HashMap源码分析
从头结点开始遍历,遍历每一个结点失败,则结点后移,直至遍历出我们的。这里的操作步骤同单链表的新增结点,只是要注意每个结点增加了一个。LinkedList在删除一个结点的源码,首先调用。如果按照我们正常的思维方式,是将。结点下一个结点关系的同时也要处理。注意操作步骤,首先是将插入结点。指针,用于指向前一个结点;结点的关系的同时也要处理。这两行代码执行顺序不影响。自己,显然是不正确的)原创 2023-05-13 11:56:44 · 1180 阅读 · 0 评论 -
顺序表ArrayList源码分析
通过索引增加和删除某个元素,涉及到该元素后面所有元素的移动操作,因此效率很低.每一次扩容采用到了位运算右移加上当前容器大小,扩容后大小是原来的。在集合末尾添加元素,适用于查找和修改操作频繁的情况。方法确定要删除元素的索引,然后通过。方法来实现删除该索引对应的元素.方法进行遍历,也可以使用。原创 2023-05-13 11:30:51 · 883 阅读 · 0 评论 -
11. 深入理解并发编程-AQS与JMM
做蛋糕分为3个步骤,定一个抽象类,重写3个方法,做模型、烘焙和涂抹原料,然后在另外1个方法做蛋糕中,将这3个方法步骤依次放入;然后具体的实现类继承自上面抽象类,比如做奶油蛋糕有奶油蛋糕的制作流程,做芝士蛋糕有芝士蛋糕的制作流程等等.次,然后进入阻塞状态),查看前一个结点是否已经使用完锁并释放,前一个结点释放锁的同时当前结点的。,并且每个子线程之间这个变量的副本是相互之间不可见的,当每个线程在运算完成后,会将这个变量副本。,这个操作过程是放在工作内存中完成的,每个工作内存都拥有一个这个主内存变量。原创 2023-05-13 11:15:51 · 1045 阅读 · 0 评论 -
10.阻塞队列和线程池
阻塞队列通常使用在生产者消费者设计模式当中,生产者不用关心生成的产品由哪个消费者来执行,只需将生产的产品放入队列中,消费者直接从队列中取出产品使用,达到了生产者与消费者之间解耦的目的和性能均衡问题.因为线程的创建、执行和销毁都是需要耗费时间和资源的,所以通过线程池来避免线程的重复创建和销毁。线程池的创建 (各个参数的含义)线程池是用来管理线程的.原创 2023-05-13 11:05:14 · 1716 阅读 · 0 评论 -
9.并发基础与CAS基本原理
利用了现代处理器都支持的CAS指令,循环这个操作,直至成功为止。要么全部完成,要么全部都不做,不可再分。原创 2023-05-13 10:59:59 · 1499 阅读 · 0 评论 -
8.线程与进程
一个线程a启动后,另外一个线程b也启动了,如果正常情况下,应该是a线程执行完成后再执行b线程;但是如果线程b使用join方法,那么线程的执行顺序就会发生变化,线程b执行完成后才会执行线程a.可以在线程调用interrupt方法后,在Thread的run方法中判断线程是否中断,或者在Runnable的run方法中判断线程是否中断(计数器和线程数不一定是相等的,计数器可以大于等于线程数,线程执行完成一个任务,就调用。,在主线程中更改他的值,那么在子线程去打印这个值,此时这个变量的值,是更改后的值.原创 2023-05-13 10:49:52 · 187 阅读 · 0 评论 -
7.序列化Serializable
json字符串->排除器->自定义的TypeAdapter->Gson自带的TypeAdapter->反射ReflectiveTypeAdapter->JavaBean。不需要,反序列化是将二进制串转换成对象的过程,直接将我们反序列化的对象进行强转就能得到我们的对象.子类实现了序列化,父类没有实现,那么从父类继承的实例变量都是默认值.序列化是为了实现进程间数据的交互,而持久化是为了数据的存储与使用.,当对象的属性添加或者删除的时候,则已经序列化的对象将无法更新.是对象的一个常量,通常是对象的。原创 2023-05-13 10:24:57 · 1142 阅读 · 0 评论 -
6.Java流在Android中的应用
以输出流为例,输入流除外,和输出流是一一对应的使用案例同样以输出流举例,出了打印流外,其他的输入流和输出流有着一一对应的关系使用案例注意: 流使用到了装饰器设计模式Component(抽象接口)——> Concreate Component(具体实现类)——>Decorator(装饰器,该抽象类持有Component的引用) ——>Concreate Component(具体实现类)原创 2023-05-12 18:07:45 · 914 阅读 · 0 评论 -
5. Android虚拟机和类加载机制
——>DexPathList ——>Element[]数组(遍历)——>Element元素——>DexFile ——>loadClassBinaryName()方法——>拿到这个class对象。如果某个类加载器在加载类时,首先将加载任务委托给父类加载器,一次递归,如果父类可以完成加载任务,就成功返回;中的组成部分,是有存储容量的高速存储部件,用来暂存指令、数据和地址.如果父类加载器无法完成任务加载或者没有父类加载器,才自己去加载。数组的前面,每次在加载类的时候,就会先加载我们修复。的代码的类通过编译(原创 2023-05-12 18:03:27 · 1083 阅读 · 0 评论 -
4. JVM内存管理
JVMJVM是一种规范.JVMJava虚拟机将字节码文件(.class)编译成操作系统可以识别的机器码.Javajava程序首先经过javac编译成.class文件,然后jvm将其翻译成操作系统可以识别的机器码.JVM只是一个翻译,将字节码文件翻译成机器识别的代码JRE除了包含JVM外,提供了很多类库(jar包)JDK除了包含JREjavac(编译代码)、javap(反编译代码)、jar(打包代码)、java等直接内存方法区堆每个私有线程包含一个虚拟机栈,每个虚拟机栈中可以包含多个栈帧。原创 2023-05-12 18:02:13 · 980 阅读 · 0 评论 -
3. 反射(这是Java被称为动态语言的关键)
反射就是在运行状态中,对于任意一个类,都能够知道这个类的属性和方法;对于任意一个对象,都能够调用的属性和方法;并且能够修改它的属性.(网络请求框架的封装,网络请求的工作本质是由。框架使用到了动态代理、反射和注解技术;仅负责网络请求接口的封装.原创 2023-05-12 18:02:14 · 115 阅读 · 0 评论 -
2. 注解Annotation
定义为class级别的注解,会被保留在class文件中,但是会被虚拟机忽略(即无法在运行期间反射获取注解).此时完全符合这种注解的应用场景为字节码操作,如:ASpect、热修复Robust。)又称为Java标注,是JDK5.0引入的一种注释机制.注解是原数据的一种形式,提供有关于程序但不属于程序本身的数据.注解对他们注解的代码的操作没有直接的影响.用于处理注解.注解处理器是javac自带的一个工具,用来在编译时期扫描处理注解信息,你可以为某些注解注册自己的注解处理器.原创 2023-05-12 18:00:51 · 1243 阅读 · 0 评论 -
1. 泛型
【代码】1. 泛型。原创 2023-05-12 17:59:38 · 1781 阅读 · 0 评论