数据存储容器
- 数组
内存地址连续;通过下标访问,查询效率高;增删消耗性能,通过创建新的数组实现增删 - 链表
链表内存地址不连续,查询效率低,增删效率高
单向链表
节点由2部分组成,当前节点信息与下一节点地址指针,只能从前往后查,不能回查
双向链表
节点由3部分组成,前一节点地址指针、当前节点信息、下一节点地址指针,可双向查询 - 树
二叉树
节点左子树小于该节点,节点右子树大于该节点,左右子树也是二叉查找树,殊勋配列
不平衡二叉树、平衡二叉树、红黑树
集合
- ArrayList
默认数组长度10,支持动态扩容。size >> 1 - LinkedList
通过双向链表实现,push(e)头部添加,add(e)尾部添加,get(index)判断从头或尾遍历 - Vector
与ArrayList类似,以动态数组存储数据;区别是Vector的add、get等方法线程安全,有同步关键字 - HashSet
本质是一个HashMap,HashSet元素值是HashMap的Key,value是new Object() - TreeSet
本质是NavigableMap,数据保存在TreeMap,key是元素值,value是new Object()
TreeSet是有序的,因为 TreeMap implements NavigableMap extends SortMap - TreeMap
本质是红黑树。全局变量comparator比较器,有一个Entry(key, value)内部类
一个Entry包含当前节点的K-V,左子节点、右子节点、父节点、节点颜色 - HashMap
jdk1.7及之前用数组+链表,jdk1.8之后采用数组+链表、数组+红黑树;链表长度大于8,装红黑树
链表转红黑树的临界值是8,红黑树转链表的临界值是6
泛型
- 无边界通配符
<?> 通用的类型
- 上边界通配符
<? extends Number> 表示Number及子孙类对象可使用
- 下边界通配符
<? super Number> 表示Number及其父类、超类所有对象可使用
反射
在java程序运行状态中,对于一个给定的Class对象,获得其属性和方法;给定一个对象都能调用它的任意一个属性和方法。私有属性调用时要强制访问
这种动态获取类内容及动态调用对象方法获取属性的机制叫做反射
注解
元数据,一种代码级别的说明
注解其实是一个接口,继承了java.lang.annotation.Annotation接口
元注解
- @Target
描述注解作用的位置。
类型 | 作用范围 |
---|---|
ElementType.TYPE | 类 |
ElementType.METHOD | 方法 |
ElementType.FIELD | 成员变量 |
- @Retention
描述注解被保留的阶段
source < class < runtime - @Documented
是否被抽取到JavaDoc api中 - @Inherited
是否可被子类继承