本帖最后由 初音初音初 于 2018-11-20 17:02 编辑
day03
学习了数据结构、List、Set、Collections。
常见的数据结构一共有五种:栈、队列、数组、链表和红黑树。
List的其中一个子类之前学习过,就是ArrayList,它属于数组结构,元素增删慢,查找快。
还有一个叫做LinkedList,它是链表结构,元素增删快,查找慢。
Set中,主要用到的是HashSet和LinkedHashSet。
HashSet是一个无序且不可重复的集合。
LinkedHashSet是一个有序且不可重复的集合。
在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化成如下格式:修饰符 返回值类型 方法名(参数类型... 形参名){ }
- java.utils.Collections是集合工具类,用来对集合进行操作。部分方法如下:
- public static <T> boolean addAll(Collection<T> c, T... elements):往集合中添加一些元素。
- public static void shuffle(List<?> list) 打乱顺序:打乱集合顺序。
- public static <T> void sort(List<T> list):将集合中元素按照默认规则排序。
- public static <T> void sort(List<T> list,Comparator<? super T> ):将集合中元素按照指定规则排序。
day04
学习了Map集合
Map集合是一个双列集合,它里面每一个地方都有成对的两个元素,分别是键(Key)和值(Value)。
Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
常用的子类有HashMap<K,V>和LinkedHashMap<K,V>。
遍历Map集合 一共有两种方式
第一种是使用keySet方法,提取Key值作为一个集合,然后循环遍历key时用key提取value;
第二种是使用entrySet将Map中一对一对的元素都提取为对象set,然后遍历这个对象set并且使用get方法提取每个对象的Value值。
使用of方法可以快速添加集合的元素。
但是HashMap这个集合,有时候不是很好用
比如我需要去买一根笔,什么笔都可以,但是由于key不能重复,那么我如果创建了一个key为笔的Map,我就得创建N个key。
day05 06
学习了异常、线程
Throwable体系:
- Error:严重错误Error,无法通过处理的错误,只能事先避免,好比绝症。
- Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。好比感冒、阑尾炎。
异常通常有两种处理方式,一种是抛出,一种是捕获。
抛出异常,就是使用throw将异常交给虚拟机处理,并结束方法的调用。
而捕获异常,是使用try去包裹住可能产生异常的代码,然后将发生异常时的处理方式填写在其后的catch中。
有时候捕获异常需要用到final代码块,比如读取文件,无论有没有异常都必须在方法结束释放(关闭)文件。
JAVA是并发的。
多线程的第一种建立方式,是直接新建一个类去继承Thread类,然后重写run()方法,最后创建这个类的对象并调用start()方法。
第二种建立方式,是建立一个“任务”类,实现Runnable接口,然后重写run()方法,最后直接创建Thread类对象,并在其构造参数中填入这个“任务”类,然后调用start()。
第一种方式建立的多线程,耦合性低,不适合资源共享。
第二种方式建立的多线程,耦合性高,适合资源共享。调用时直接放入任务即可。
多线程经常会发生线程安全问题,主要体现在多个线程对共享资源执行写操作的时候,体现为结果的不正确。
为了避免这种情况,使用synchronized同步代码块,让每一个线程执行完毕后,其它线程才可以占用此资源。
在执行同步时,可以添加同步锁去控制线程的状态,可以将几个线程用锁关联起来,让他们互相制约触发,实现线程的有序执行
线程状态通常有六种:
NEW(新建) Runnable(可运行) Blocked(锁阻塞) Waiting(无限等待) Timed Waiting(计时等待) Teminated(被终止)
|
|