数据结构考点
算法考点
java集合框架
Collection是所有集合的根。。。
集合之List和Set
- ArrayList通过grow方法实现动态扩容:创建新的数组,赋予新的长度,覆盖掉原先的数组,不是线程安全的。
- Vector:方法都加了synchronized锁,线程安全,但是效率低
- LinkedList:线程不安全
- HashSet(无序):底层是HashMap,调用HashSet的add方法时,其实是把元素以健值对(键:Final的对象)的形式,put到HashMap中
- TreeSet(考虑排序):底层是TreeMap
- 两种排序方式
- 1.基于元素对象所属类实现的comparable接口(实现equals,compareTo和hashCode方法),无参构造
- 2.基于比较器comparator,有参构造
- 两种排序方式
集合之Map
Map的key是通过Set组织起来的,value是通过Collection组织起来的
HashMap、HashTable、ConcurrentHashMap的区别
-
HashMap
- java8以前:结合数组+链表实现
Hash算法:位运算
数组存储链表的头结点
- java8以后:结合数组+链表+红黑树
hashkey相同的元素用链表链起来,当链表的长度超过一定的阈值之后,链表将被改造为红黑树,长度小于阈值后,红黑树又被转换为链表。
Hash算法:位运算
2.HashTable
早起ConcurrentHashMap优化:将数据分段存储,分段加锁
java之后的:锁加在bucket上
J.U.C知识点梳理
java.util.concurrent:提供了并发编程的解决方案
- CAS是java.util.concurrnt.atomic包的基础
- AQS是java.util.concurrent.locks包以及一些常用类比如Semophore,ReentrantLock等类的基础