随笔分类 - Java学习笔记
摘要:1.类初始化过程 一个类要创建实例需要先加载并初始化该类 main方法所在的类需要先加载和初始化 一个子类要初始化需要先初始化父类 一个类初始化就是执行<client>()方法(编译器生成的字节码) <client>()方法由静态类变量显示赋值代码和静态代码块组成 类变量显示赋值代码和静态代码块代码
阅读全文
摘要:1.CAS导致ABA问题: CAS算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并交换,那么在这个时间差中会导致数据的变化。 比如:线程1从内存位置V中取出A,这时线程2也从V中取出A,线程2进行了一些操作将值改成了B,然后线程2又将V的数据改回A;此时线程1进行CAS操作发现内存中
阅读全文
摘要:1.CAS: 比较并交换(Compare And Swap),是Unsafe类中的一条CPU系统原语,原语的执行必须是连续的,在执行过程中不允许被中断,即CAS是一条CPU的原子指令,不会造成数据不一致问题。 类似:Atomic中的compareAndSet()方法 如果期望值和真实值相同,本次操作
阅读全文
摘要:HashMap数据存储的过程先根据key获得hash值,通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。 其中,
阅读全文
摘要:1. HashMap在什么条件下扩容 判断HashMap的数组Size大小如果超过loadFactor*capacity,就要扩容。 相关的类属性: capacity:当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的 2 倍。 loadFactor:负载因子,默认为 0.75 loa
阅读全文
摘要:HashMap源码数据结构: 其中,Entry就是一个链表节点。如果将数组替换成LinkedList是否可行?如下: 将数组替换成LinkedList是可以的,但是HashMap选用数组的原因有以下两点: 1)数组效率高 在HashMap中,定位桶的位置是利用元素的key的哈希值对数组长度取模得到。
阅读全文
摘要:引用型Key重写equals和hashcode方法: 参考:https://snailclimb.top/JavaGuide/#/java/collection/HashMap
阅读全文
摘要:1.简介 HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap 最多只允许一条记录的key为 null,允许多条value的值为 null。 HashMap 非线程安全,即任一时刻可以有多个线程同时
阅读全文
摘要:参考:https://snailclimb.top/JavaGuide/#/java/collection/LinkedList
阅读全文
摘要:1.简介 LinkedList 是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了 List 接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。 LinkedList是实现了List接口和Deque接口的双端链表。 Lin
阅读全文
摘要:三种遍历方式 通过迭代器Iterator遍历 通过get(索引值)遍历 for循环遍历 ArrayList使用Demo 【注意】 java 中的length 属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了 length 这个属性. java 中的length()方法是针对字
阅读全文
摘要:1.简介 ArrayList 是最常用的 List 实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔, 当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。 当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进
阅读全文
摘要:Collection 1. List ArrayList :Object数组,是一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低。 LinkedList :是一个双向链表(JDK1.6之前为循环链表,JDK1.7取消了循环)。它也可以被当作堆栈、队列或双端队列进行
阅读全文
摘要:1. java 中的 length 属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了 length 这个属性. 2. java 中的 length() 方法是针对字符串说的,如果想看这个字符串的长度则用到 length() 这个方法. 3. java 中的 size() 方法
阅读全文
摘要:1.集合的理解和好处 2.集合的框架体系图 ★ 3.Collection接口的特点和使用 ★ 4.List和Set接口的特点和使用★ 5.List接口的实现类学习★ 6.Set接口的实现类学习★ 7.Map接口的特点和使用★ 8.Map接口的实现类学习★ 9.Collections工具类的使用★ 1
阅读全文
摘要:一、包装类 √ 二、String类 ★ 三、StringBuffer和StringBuilder类 ★ 四、Math类 五、System类 六、Arrays类 七、BigInteger类和BigDecimal类 八、Date日期类、Calendar日历类以及新的日期 一、包装类 1.概念:为8大基本
阅读全文
摘要:1.Java异常事件 Java程序在执行过程中所发生的异常事件可分为两类: Error: Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性的代码进行处理。 Exception: 其它因编程错误或偶然的外
阅读全文
摘要:枚举的理解 枚举其实就是一个类,枚举类的实例是一组限定的对象 传统的方式创建枚举 【了解】 对比:单例类 1、构造器私有化 2、本类内部创建对象 3、通过public static方法,对外暴露该对象 枚举类 1、构造器私有化 2、本类内部创建一组对象,添加public static修饰符,直接暴露
阅读全文
摘要:理解: 一个类中又完整的嵌套了另一个类结构,被嵌套的类称为内部类。外面的类称为外部类,和内部类无关的外部类称为外部其他类。 好处: 可以直接访问外部类中的所有成员,包含私有的!!! 分类: 定义在成员位置上: 成员内部类(没有使用static修饰) √ 静态内部类(使用static修饰) 定义在局部
阅读全文
摘要:Window ->Preferences ->Java ->Installed JREs ->选中jdk ->Edit ->选中rt.jar ->source attachment configuration ->external file selection ->src.zip
阅读全文