Java基础深入浅出

Vector,ArrayList, LinkedList

  1. Vector、ArrayList类似数组存储在内存,LinkedList以链表。
  2. List元素有序、允许有重复的元素,Set元素无序、不允许有重复元素。
  3. Vector线程同步,ArrayList、LinkedList不同步
  4. LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查找,不适合指定位置的插入、删除操作
  5. ArrayList元素填满容器时自动扩充容器大小的50%,Vector则是100% ArrayList更节省空间

HashTable, HashMap,TreeMap

hashTable线程同步,不能空值,使用enumeration,默认hash数组大小11,增加old*2+1

hashMap默认16,2的指数倍

treeMap键升序排序

class.forName与classLoader

forName类class加载jvm,解释类 执行类中的static块

classLoader加载到jvm,newInstance执行static块

 Java类的各种成员初始化顺序如:父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺序_java 父子类静态非静态加载顺序-CSDN博客

hashMap的put

key哈希算法与 与运算得出数组下标   为空key/value封装为entry对象/node对象

 不为空:

   jdk要扩容 扩容,不生成entry对象,头插法添加到当前位置的链表中

  8 先判断node类型,红黑树 封装节点到红黑树中 

     链表 封装node尾插插入到最后位置,遍历链表 是否存在key 更新否新增,新增完链表节点是否大于8,是转成红黑树

    key和value封装node插入到链表 红黑树 是否需要扩容

扩容

   新数组,遍历老数组每个位置上链表的每个元素,取key 基于新数组长度 计算每个元素新数组下标,元素添加到新数组中去,all元素转移完 新数组赋值给hashMap的table属性

1.8的话

 新数组 遍历老数组每个位置上的链表/红黑树

  链表,将链表每个元素重新计算下标,添加到新数组中去

  红黑树,先遍历红黑树,计算出红黑树中每个元素对应在新数组中下标位置

  统计下标位置元素个数,超过6红黑树否链表,转移完 新数组赋值给hashMap的table

copyOnWriteArrayList 底层原理

  添加元素时,复制一个新的数组,写操作在新数组上进行,读操作原数组进行

  写操作加锁,结束后把原数组指向新数组

ae_readable

spring

容器启动

扫描得到BeanDefinition存到map中,选出非懒加载单例Bean

BeanDefinition创建Bean

    合并BeanDefinition 推断构造方法 实例化 属性填充 初始化前 初始化 后

容器启动事件 

bean基础

推断构造方法 / 实例化 / 填充属性(依赖注入)

处理aware回调  /   postConstruct注解   /   初始化 InitializingBean接口 /  aop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值