final关键字
final关键字的用法
final修饰类
final修饰方法
例子
final修饰局部变量
final修饰成员变量
内部类
成员内部类
-- 内调用外
-- 外调用内
- 间接方式
- 直接方式
内部类重名变量访问
局部内部类
-- 调用局部内部类(通过外部方法中局部内部类自己调用内部方法)
类权限修饰符
局部内部类的final问题
匿名内部类
匿名对象
String和StringBuilder
int和Integer互转
自动装箱和拆箱
基本类型->字符串(String)
基本类型的值 + ""
字符串(String)->基本类型
集合
Collection父类共用方法
迭代器
例子
注:
next()既会取出元素,也会把指针向后移一位。
红黑树
List
List集合遍历
ArrayList
- 底层数据集结构是可变长度的数组。
- 不是线程同步的,多线程并发,效率高速度快。
- 查询快(数组地址连续),增删慢(每增加一个元素,底层就要调用数组复制方法(
arraycopy))。
LinkedList
- 底层数据集结构是链表。
- 不是线程同步的,多线程并发,效率高速度快。
- 获取、操作首尾元素效率高。增删快,查询慢。
- 创建LinkedList不能使用多态。
- 特有方法:
注:
addFirst(..)等效于push(..)。addLast(..)等效于add(..)。removeFirst()等效于pop()。
Vector
- 底层数据集结构是数组。
- 是线程同步的(单线程)。
HashSet
- 遍历
- 哈希值: 对象的逻辑地址,十进制,不是物理地址。
- 哈希表
- Set集合不存储重复元素的原理
前提:存储的元素必须重写hashCode和equals方法,所以用HashSet存储自定义元素时,自定义类(如Person)要重写hashCode和equals方法。
String类内部重写了hashCode和equals方法。
LinkedHashSet
- 不允许重复但有序。
Collections集合工具类方法
Collections.sort
- 自定义类需要重写接口Comparable中的
compareTo方法 - 接口Comparable的排序规则
针对自定义类排序的例子
Comparable和Comparator的区别
普通例子
针对自定义类排序的例子
- 可定义多条排序规则。
HashMap和LinkedHashMap
HashMap中的方法
put
remove
- 注意方法的返回值。
- 使用包装类(如Integer)代替基本数据类型(如int)。
get
containsKey
keySet
通过key找value的方式遍历Map集合
示例
或使用增强for循环遍历
entrySet
- Map.Entry存储的是Map中的<key,value>对。
通过Entry对象遍历
示例
或使用增强for循环遍历
- 注意:HashMap存储自定义类型(如Person)为key时,为保证key是唯一的,必须重写
hashCode和equals方法。
LinkedHashMap
- 底层实现是哈希表+链表(记录元素顺序),所以是有序的。HashMap是无序的。
Hashtable
Hashtable和HashMap的区别
- 同: 底层都是哈希表。
- Hashtable的键和值都不能为null。HashMap允许键和值为null。
- Hashtable是同步的(线程安全/单线程),所以速度慢。HashMap是线程不安全的(多线程),所以速度快。
Debug
- 在出错的代码前一行加断点进行调试。