1.常用类库
1.1.时间
1.1.1.Date类
可以看到date2的日期和星期都比date1减一天(往前算一天)
比较两个日期的先后:
可以用getTime()获取两个日期的毫秒数,将问题转换为比较两个毫秒数的大小
1.1.2.DateFormat类
1.2.字符串
1.2.1.概述——CharSequence接口
1.2.2.String类
1.2.3.StringBuffer/StringBuilder类
2.数据结构
2.1.集合概览
2.2.Collection接口
2.2.1.List接口
2.2.1.1.ArrayList类(线程不安全)
2.2.1.2.Vector类(线程安全)
2.2.1.3.LinkedList类(双向链表)
2.2.1.4.Iterator/ListInterator(迭代器)
Iterator可用于List和Set
ListInterator只能用于List
迭代器的快速失败和安全失败:
对集合遍历的时候,如果集合发生了修改,遍历结果一定是不对的,这就称为失败。
快速失败:如果在迭代器创建之后的任意时间修改集合,除了迭代器自身的remove方法之外,迭代器将抛出ConcurrentModificationException,会报错。
安全失败:集合在遍历的时候,把集合复制一份,对备份进行迭代,这时候对原集合进行修改不会报出错误。但遍历结果仍然不能真实反映修改后的结果,所以也是失败。
创建集合
创建迭代器
创建时指针指向0下标之前的位置
这是常见的遍历操作方法
hasNext表示如果下一位有数据则返回true,如果下一位没有数据返回false
next表示把指针下移一位并返回指向的元素
remove删除当前指针所指的元素
创建ListIterator
Privious()是指针向上走,next()是指针向下走
初始指针指向0下标之前的位置,此时不能再向上走
add()是在当前指针位置添加一个元素
set()是修改当前指针位置的元素
2.2.1.5.forEach循环
forEach用来迭代数组 或 集合(Collection下的集合)
2.2.2.Set接口
2.2.2.1.HashSet类
创建HashSet
取出数据:没有get方法
方法1:
可以创建iterator迭代器来取出数据
方法2:forEach
方法3:toArray转换成数组
存入重复元素时不会新增元素,并且返回false
2.2.2.2.TreeSet
创建集合并存取数据
可以用这种方法来看不同数字顺序对应的字符串(ASCII码表)
自定义的类如果不指定排序规则会报错
报错:类型转换异常:Person类不能转换为Comparable类
原因:Comparable是一个接口,要想比较自定义类的大小(顺序),就必须实现这个接口的比较方法。
解决方法:
(1)自定义类要实现Comparable<泛型指的是你要进行比较的类>接口
(2)实现comparableTo(你要进行比较的类,也就是上面的泛型)抽象方法
(3)重写comparaTo()方法,自定义比较规则(this和传入的o两个对象进行比较)
返回值:负数 = this小;零 = 相等;正数 = this大
(4)验证结果
(5)还需注意一点:实现这个方法不仅会影响比较顺序,也会影响能否重复存储
TreeSet不能存储“相同”元素,这个“相同”也是通过这个方法定义的
age出现两个19,被认为是相同元素,不会重复存储,但我们认为这是两个不同元素,所以设定规则的时候要注意,尽量设定不易冲突、唯一性强的比较规则,防止丢失数据