Java学习日志
挑战接下来的100天里完成每天用一个小时复盘学习的Java内容 带着问题目的去学 而不是盲目看视频 要多写笔记 多问 并形成言简意赅的学习日志。
DAY1
学习内容 尚硅谷模块18 算法知识
1.collection 接口
理解为一个工具接口实现常用数据结构的调用
查 JAVA API的主要方法 add remove equals toArray
2.单列集合
与map双列集合相对应
列表
集合
-
HashSet
(哈希表,完全无序) -
LinkedHashSet
(链表 + 哈希表,插入顺序有序) -
TreeSet
(红黑树,自然顺序或自定义排序)
队列
3.迭代器
iterator
hasnext next remove 实现遍历删除
4.学习建议
多动手 针对性 实际项目
5.哈希表
实现原理 单链表 + 数组 链地址法 ,开地址法
6.红黑树(先了解 重点学习)
尚硅谷视频(看到左旋转 具体代码实现后续再学习)
AVL 树中的一种实现 用于修改频繁场景
next avl树
7.泛型
class Box<T> { private T item; public void setItem(T item) { this.item = item; } public T getItem() { return item; } }
泛型类 泛型方法
类型安全 编译前检查 无需强转 代码复用
T只收引用类型如包装类 String
8.包装类
基本类型变成对象
int -> Integer
char -> Character
用于集合框架 调用对象方法 需要null
自动拆装箱 包装类方法 包装类不可变
9.List接口
-
ArrayList 动态数组 查多改少
-
LinkedList 双向链表 改多查少
-
Vector 线程安全
10.增强for
1.作用: 遍历集合或者数组 2.格式: for(元素类型 变量名:要遍历的集合名或者数组名){ 变量名就是代表的每一个元素 } 3.快捷键:集合名或者数组名.for
小结
模块18回顾: 1.Collection集合:单列集合的顶级接口 a.add addAll clear size isEmpty remove toArray contains 2.迭代器:Iterator a.获取:iterator方法 b.方法: hasNext() next() c.并发修改异常:在迭代集合的时候,不能随意修改集合长度 原因:调用add,只给实际操作次数+1.后面调用next的时候,没有给预期操作次数重新赋值,导致预期操作次数和实际操作次数不相等了 3.数据结构: 栈:先进后出 队列:先进先出 数组:查询快,增删慢 链表:查询慢,增删快 4.ArrayList a.特点: 元素有序,有索引,元素可重复,线程不安全 b.数据结构: 数组 c.方法: add(元素)直接在最后添加元素 add(索引,元素)在指定索引位置上添加元素 remove(元素)删除指定元素 remove(索引)按照指定索引删除元素 size()获取元素个数 get(索引)根据索引获取元素 set(索引,元素)将指定索引位置上的元素修改成我们指定的元素 d.利用无参构造创建集合对象,第一次add时,会创建一个长度为10的空数组 超出范围,自动扩容->Arrays.copyOf 扩容1.5倍 5.LinkedList a.特点: 元素有序 有索引(java提供了按照索引操作元素的方法,并不代表本质上拥有索引),元素可重复,线程不安全 b.数据结构:双向链表 c.方法:有大量直接操作收尾元素的方法 6.增强for: a.格式: for(元素类型 变量名:集合名或者数组名){ 变量就代表每一个元素 } b.原理: 遍历集合时,原理为迭代器 遍历数组时,原理为普通for 模块19重点: 1.会Collections集合工具类的常用方法 2.会使用泛型 3.知道HashSet和LinkedHashSet的特点以及使用 4.知道HashSet将元素去重复的过程