Java学习笔记

**

1.Java的基础数据类型

(1)boolean根据jvm虚拟机的规则单独使用时时4btype,在数组里时1btype
(2)整形btype,short,int,long对应为1btype,2btype,4btype,8btype
(3)浮点型 float 1位符号8位整数23位小数 double 1位符号11位整数52位小数
(4)char 2btype
**

2.String,StringBuilder,StringBuffer的区别

String类为final类不可被继承
String 定义的同内容会存在同一个栈内存块,当内容改变时其实并不会改变原栈内存块而是新开辟一个栈内存块来存储新内容,原栈内存块变成孤儿在不确定时间后被JVM的垃圾回收机制(GC)给回收掉了
注:Java9貌似改成byte数组来存了但是依旧不可变
StringBuffer则是会在栈内存里存一个地址指向堆内存块,块大小初始默认为16之后如果改变则变成(新容量)=原容量*2+2
改变StringBuffer的值是改变原内存块,当改变后的长度超过原容量时则需要新开辟一块内存块将原内容复制到新内存快上再改变这影响StringBuffer的效率
StringBuilder类似StringBuffer但是其类方法缺少synchronized关键字因此多线程不安全

**

3.ArrayList和LinkedList

ArrayList底层为Object数组ArrayList继承AbstractList抽象父类,实现了List接口(规定了List的操作规范)、RandomAccess(可随机访问)、Cloneable(可拷贝)、Serializable(可序列化)。线程不安全,多线程情况下需要使用synchronized关键字
LinkedList底层为双向链表插入删除快单查询慢,实现了List接口提供了开头和结尾进行get
remove,insert可以在任意位置
**

4.类的实例化顺序

父类静态变量>父类静态方法代码块>子类静态变量>子类静态方法代码块>父类非静态变量>父类构造函数>子类非静态变量>子类构造函数
**

5.HashMap和HashTable区别

Hashtable 继承自 Dictiionary 是同步的线程安全,key和value不允许为null有contains,containsValue和containsKey方法
HashMap继承自AbstractMap非同步线程不安全,key和value允许为null只有containsValue和containsKey方法
底层均为数组加链表实现当链表长度到一定阈值后变为红黑树(平衡二叉查找树),链表的每一个节点存储为Entry(hash,key,value,next)先根据hash函数算出hashcode即元素在数组内的位置,再通过equals函数查找其在对应链表位置,
Hashtable默认初始大小为11,增加方式为old2+1(由其(hash & 0x7FFFFFFF) % tab.length决定) HashMap初始大小为16(由其h & (length-1)决定),负载因子0.75,阈值12 扩容为2的指数由hash算法决定
扩容需满足下列条件
1、 存放新值的时候当前已有元素的个数必须大于等于阈值
2、 存放新值的时候当前存放数据发生hash碰撞(当前key计算的hash值换算出来的数组下标位置已经存在值)
一般数组大小
0.75>=元素个数当元素个数大于扩容(大概率发声碰撞)也可能如下情况
(1)、就是hashmap在存值的时候可能达到最后存满16个值的时候,再存入第17个值才会发生扩容现象,因为前16个值,每个值在底层数组中分别占据一个位置,并没有发生hash碰撞。

(2)、当然也有可能存储更多值(超多16个值,最多可以存26个值)都还没有扩容。原理:前11个值全部hash碰撞,存到数组的同一个位置(这时元素个数小于阈值12,不会扩容),后面所有存入的15个值全部分散到数组剩下的15个位置(这时元素个数大于等于阈值,但是每次存入的元素并没有发生hash碰撞,所以不会扩容),前面11+15=26,所以在存入第27个值的时候才同时满足上面两个条件,这时候才会发生扩容现象。

**

**

**
**
**

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值