A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 卞建彬 中级黑马   /  2018-9-20 15:26  /  848 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

冯光:


java.util.List<E>接口:
        // 常用特有成员方法 (都是按照索引来操作的)
        public?void?add(int?index,?E?element): 将指定的元素, 添加到该集合中的指定位置上
        public?E?get(int?index): 返回集合中指定位置的元素
        public?E?remove(int?index): 移除列表中指定位置的元素, 返回的是被移除的元素
        public?E?set(int?index,?E?element): 用指定元素替换集合中指定位置的元素, 返回值的更新前的元素

java.util.LinkedList<E>类: 链表结构, 查询慢, 增删快
        // 特有成员方法(主要操作开头和末尾元素)
        void?addFirst(E?e): 将指定元素插入此列表的开头
        void?addLast(E?e): 将指定元素添加到此列表的结尾
        E?getFirst(): 返回此列表的第一个元素
        E?getLast(): 返回此列表的最后一个元素
        E?removeFirst(): 移除并返回此列表的第一个元素
        E?removeLast(): 移除并返回此列表的最后一个元素
        E?pop(): (其实就是removeFirst())从此列表所表示的堆栈处弹出一个元素 栈stack
        void?push(E?e): (其实就是addFirst())将元素推入此列表所表示的堆栈
       
java.util.Collections类: 操作集合的工具类
        // 静态方法
        static?<T>?boolean?addAll(Collection<T>?c,?T...?elements):往集合中添加一些元素
        static?void?shuffle(List<?>?list) :打乱集合顺序
        static?<T>?void?sort(List<T>?list) :将集合中元素按照默认规则排序
        static?<T>?void?sort(List<T>?list,Comparator<??super?T>?c):将集合中元素按照指定规则排序
能够说出List集合特点
1. 元素存取有序
2. 有索引
3. 元素可以重复
能够说出常见的数据结构

队列
数组
链表
红黑树
哈希表 = 数组 + 链表/红黑树
能够说出数组结构特点
查询快
增删慢
能够说出栈结构特点
先进后出
入口出口是同一个
能够说出队列结构特点
先进先出
入口出口在两侧
能够说出单向链表结构特点
查询慢
增删快
能够说出Set集合的特点
1. 没有索引
2. 元素不能重复
能够说出哈希表的特点
哈希表 = 数组 + 链表/红黑树

先调用 hashCode()算出哈希值, 根据哈希值判断数组中是否有重复元素
        如果要没有, 就添加
        如果有元素, 哈希值冲突
                则调用元素的 equals() 遍历 链表/红黑树 依次比较
                        如果有重复的, 则不添加
                        如果没有重复的, 则添加
能够说出可变参数的格式
方法名(参数类型... 变量名) {
    // 当作数组来使用
}

方法名();  // 数组

注意事项:
        只能有1个可变参数, 必须放在最后
能够使用集合工具类
Collections类
        static addAll(Collection c, T... t)
    static shuffle(List list)
    static sort(List list)
    static sort(List list, Comparator c)
能够使用Comparator比较器进行排序
static sort(List list, Comparator c)

传递Comparator实现类对象, 重写 compare(T o1, T o2)
     规则:
                o1 - o2 升序
                o2 - o1 降序
Day04
java.util.Map接口: 双列集合的顶层
        // 成员方法
        V?put(K?key,?V?value): 添加/修改键值对. 如果键存在, 则用新值替换已有值
        V?remove(Object?key): 根据键删除键值对, 返回被删除元素的值
        V?get(Object?key): 根据键获取值. 如果键不存在, 则返回null
        boolean containsKey(Object key): 判断是否包含指定的键
        Set<K>?keySet(): 获取Map集合中所有的键, 存储到Set集合中
        Set<Map.Entry<K,V>>?entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)
       
// JDK 9对于集合初始化的优化
java.util.List
        // 静态方法
        static List<E> of(E... e): 返回包含指定元素的 不可变List 集合
       
java.util.Set
        // 静态方法
        static Set<E> of(E... e): 返回包含指定元素的 不可变Set 集合
       
java.util.Map
        // 静态方法
        static Map<K, V> of(K k1, V v1): 返回包含指定键值对的 不可变Map 集合
能够说出Map集合特点
1. 键值对方式存储
2. 键和值必须是引用类型, 可以类型相同, 也可不同
3. 键不能重复的, 存取无序
4. 一个键只能对应一个值
使用Map集合添加方法保存数据
V put(K key, V value):
        如果键不存在, 添加键值对, 并返回null
        如果键存在, 用新值替换旧值, 并返回旧值
使用”键找值”的方式遍历Map集合
keySet()

Set<键> set = map.keySet();
for (键的类型 key : set) {
    值 = map.get(key);
}
使用”键值对”的方式遍历Map集合
Entry  entrySet()

Set<Map.Entry<K, V>> set = map.entrySet();
for (Map.Entry<K, V> entry : set) {
    entry.getKey();
    entry.getValue();
}
能够使用HashMap存储自定义键值对的数据
自定义对象  Person

作为值
        没有特殊要求
作为键
        需要重写 hashCode() equals()
Day05
能够辨别程序中异常和错误的区别
异常: XxxException, 可以处理
错误: XxxError, 不能处理, 需要修改代码
说出异常的分类
编译时异常: Exception及其子类(排除RuntimeException)
    编写代码时就发生的异常, 在编写代码时必须进行处理
运行时异常: RuntimeException及其子类
        运行时发生的异常, 可以不处理
说出虚拟机处理异常的方式
打印错误信息红字
中断程序
列举出常见的三个运行期异常
NullPointerException
IndexOutOfBoundsException
ArrayIndexOutOfBoundsException
能够使用try...catch关键字处理异常
try {
    // 可能发生异常的代码
    // 可能发生异常的代码
    // 可能发生异常的代码
    // 可能发生异常的代码
    // 可能发生异常的代码
} catch (异常类型 变量名) {
    // 处理异常的逻辑
}
...
catch (异常类型 变量名) {

} finally {
    // 释放资源 (无论是否有异常都会被执行)
}
能够使用throws关键字处理异常
public static void 方法名() throws 异常类名, 异常类名... {

}

方法自己不能(不适合)处理, 交给方法的调用处进行处理
能够自定义异常类
编译时异常: 定义类继承Exception          强制要求方法调用者处理的异常
运行时异常: 定义类继承RuntimeException   不是特别严重的异常
能够处理自定义异常类
制造: throw 异常对象;
处理:
        throws声明抛出
        try-catch捕获处理
说出进程的概念
程序中至少有一个进程, 可以有多个进程
程序 > 进程

进程: 一个应用程序在内存中的一次执行过程
说出线程的概念
线程: 进程中的一条执行路径

一个进程中至少有1个线程, 可以有多个线程

进程 > 线程

最终执行代码的是线程
能够理解并发与并行的区别
并发: 同一时间段内交替执行
并行: 同一时刻同时执行
能够开启新线程
1. 定义类, 继承Thread类
2. 重写run()方法, 方法中是线程要执行的任务
3. 创建子类的对象
4. 通过子类对象调用start()方法启动线程
Day06
能够描述Java中多线程运行原理
CPU高速在多个线程之间切换 (本质)
多个线程抢夺CPU的执行时间
能够使用继承类的方式创建多线程
继承Thread
1. 定义类继承Thread类
2. 重写run()方法
3. 创建子类的对象
4. 调用start()方法启动线程
能够使用实现接口的方式创建多线程
实现Runnable接口
1. 定义类实现Runnable接口
2. 重写run()
3. 创建Runnable实现类对象
4. 创建Thread对象, 并将Runnable实现类对象传入
5. 调用Thread对象的start()
能够说出实现接口方式的好处
1. 避免单继承的局限性
2. 解耦(提高程序的扩展性, 降低程序的耦合性) 将线程和任务分离
能够解释安全问题的出现的原因
多线程操作共享变量
能够使用同步代码块解决线程安全问题
synchronized (锁对象) {
        // 操作共享变量的代码(可能发生安全问题的代码)   
}

锁对象:
        1. 类型可以是任意类型
        2. 锁对象必须是多个线程共享的唯一的同一个对象
能够使用同步方法解决线程安全问题
非静态:
public synchronized 返回值类型 方法名(参数列表) {
        //  操作共享变量的代码(可能发生安全问题的代码)   
}
锁对象: this

静态:
public static synchronized 返回值类型 方法名(参数列表) {
        //  操作共享变量的代码(可能发生安全问题的代码)   
}
锁对象: 当前类的字节码对象 Class对象 (同一个类, 字节码对象只有唯一的一个)
        对象.getClass()
    类名.class
    Class.forName("类的全名字符串")
能够说出线程6个状态的名称
NEW 新建
RUNNABLE 可运行
BLOCKED 锁阻塞
WAITING 无限等待
TIMED_WAITING 计时等待
TERMINATED 终止





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马