1.时间
基础知识:时间原点:1970-1-1 0点0秒,世界标准时间,我们国家处于东八区,1970-1-1 8点0分0秒
1.1Date
包:java.util
构造: Data(); 代表当前系统时间
Data(long 毫秒值) 代表指定时间,从1970-1-1 8:0:0 距离的毫秒值
功能:long getTime(); 获取里面内置的毫秒值
void setTime(long 毫秒值) 修改毫秒值
2.SimpleDateFormat
作用:用来实现Date和String之间的距离
包:java.text
看构造:
SimpleDateFormat(String format):
- yyyy-MM-dd HH:mm:ss
- yyyy年MM月dd日 HH:mm:ss
功能:
- Date --->String String format(Date date) 将指定的Date转成指定的字符串
- String --->Date Date parse(String source) 要求你的字符串和模式需要匹配才行,否则报ParseException
2.集合
对比数组:
- 集合的长度可以改变,动态扩容
- 只能存储引用数据类型,不能存储基本数据类型
2.1Collection接口
A:List(接口)
- ArrayList
- LinkedList
B:Set(接口)
- HashSet
- TreeSet
- 特点:没有元素索引
Collection的公共方法
1.boolean add(E e); 添加元素
2.boolean remove(Object obj);注意:在使用迭代器的时候,不能使用集合的方法对集合进行增删操作否则会报java.util.ConcurrentModificationException
3.boolean contains(Object obj);判断集合中是否包含某个元素
4.int size(); 求集合中的元素
void removeIf(Predicate<E> pre); 发现接口只有一个抽象方法,可以匿名内部类,使用lambda
void clear();清空集合,让集合的长度变为0;
boolean isEmpty();判断集合是否长度为0
Iterator<E> iterator()
迭代器的方法
1.boolean hasNext(); 判断是否有元素
2.E.next();取出元素
3.E remove(); 删除迭代器指针对应的元素
使用迭代器遍历的时候,只能使用该方法删除,不能使用集合的方法,因为使用集合的方法,可能出现隔过去的情况,迭代器的remove方法底层有指针回退。
示例:
//2.借助迭代器遍历集合
Iterator<String> it = coll.iterator();
//3.借助迭代器的方法, 遍历集合
while (it.hasNext()){
String next = it.next();
System.out.println(next);
}
所有实现迭代器接口都可以使用增强for
for(元素的数据类型 变量名: 集合|数组) {
变量名
}
注意事项:底层采用的迭代器,不能使用集合的方法进行增删,只能查看或者元素的内容,因为看不到迭代器对象
2.2List
特点:
- 有序, 存储顺序和取出的顺序 1,5,6 ----> 1,5,6
- 可以存储重复元素
- 有索引
特有的方法
void add(int index, E e); 在指定位置上添加元素,原来的以及以后的要顺延一位
E remove(int index); 删除指定索引的元素,删除完后,后面的索引的元素会往前顺延
E set(int index, E newE); 将指定位置的元素修改为newE,返回老元素
E get(int index); 根据索引获取元素 可以用遍历集合(普通for)
注意:一旦牵扯到索引就要注意索引越界
2.3Set
特点:
- 大部分无序 存储的顺序和取出的顺序不一定一致
- 不可以重复(去重)
- 没有索引
- 所有的功能都是从Collection中继承下来的,没有任何的特有方法
实现类TreeSet
1.可以对元素进行排序
2.结论:如果存储的自定义类型,必须指定排序规则才可以
- 自然排序 让自定义类实现Comparable接口,重写compareTo方法, 在里面定义排序规则, 其中this代表当前正在添加的元素, o代表是集合中元素
- 比较器排序 在创建TreeSet的时候传入比较器, Comparator, 重写里面的 compare(o1, o2), 其中o1代表正在添加的元素, o2代表集合中元素
- 在TheeSet中比较器的优先级更高一点, 因为底层优先判断是否有比较器, 如果有按照比较器的规则来;排, 如果没有比较器, 才会走有类里面的compareTo方法比较!!!!
3.去重标准 只和比较的值是否为0有关系,为0则认为重复,不为0认为不重复
4.缺点:相同内容的,可能比较的值为0, 这样现实生活中可能跟这个需求有违背, set集合没有索引操作起来很不方便!!!!
5.开发过程中,真的要实现去重以及排序,还是建议使用ArrayList集合
6.原理: 特点:增删满,查询快
底层基于树形结构
红黑树:满足自己的红黑规则则不需要旋转
2.4Collections(Arrays)
- static void sort(List<T> list) 自然排序, 要求自定义类和Comparable有关系
- static <T> void sort(List<T> list, Comparator<T> c) 比较器排序规则
3.finally
特点:保证一段代码一定会走, 哪怕方法结束了
作用:经常用于释放资源
格式(前提: 不能单独使用):
try{
}finally{
}
try{
}catch(Exception e){
}finally{
}
4.数据结构
作用: 规定了数据的存储的机构
类型:
- 栈: 先进后出 我们现实中使用较少!!!不是很常见 栈内存就是基于栈结构, 每当新的方法被调用, 新的方法执行完后, 老的才会执行
- 队列:先进先出 在我们现实中用的而很多了
- 数组:查询快, 增删慢 连续的空间, 0索引旁边一定是1索引的元素 ArrayList
- 链表:查询慢,增删块 查询慢, 因为已知都是头节点或者尾节点, 要么从头查, 要么从尾, 所以很慢;增删快:不用牵一发动全身, 只需要断开两个节点的关系即可。散列结构, 底层是通过记录地址的方式链接起来。如:LinkedList 特有方法 一对操作首尾的操作!!!!!!
- 红黑树结构
- 哈希表结构