-----接Java进阶笔记(初级)-----
目录
-
集合
- ArrayList
- 可以通过List来接收ArrayList对象(因为ArrayList实现了List接口)
方法:接口名 柄名 = new 实现了接口的类();
PS: List list = new ArrayList(); - 遍历方法:1.使用迭代器Iterator遍历;2.用for循环遍历;3.用增强型for循环
- 可以通过List来接收ArrayList对象(因为ArrayList实现了List接口)
- LinkedList
- 实现了List接口
- 实现了双向链表结构Deque,可以很方便的在头尾插入删除数据
addFirst(),removeFirst() //头部插入,删除
addLast(),removeLast() //尾部插入,删除 - 实现了Queue接口(先进先出队列 FIFO)
offer() ----将元素添加到队尾
poll() ----取出第一个元素
peek() —获得第一个元素但不取出
- 二叉树(排序):
- 选定一个根节点
- 插入数据,小、相同的放左边,大的放右边
- 采用中序遍历即: 中间的数遍历后放在中间
- HashMap
- HashMap储存数据的方式是—— 键值对
- 键不能重复,值可以重复
- HashSet
- 元素不能重复
- 没有按照元素的插入顺序排列
- 不能通过get()方法获取元素,遍历需要用到迭代器或增强for循环
- Collection接口
- Collection是 Set,List ,Queue和 Deque的接口
- Collection是 集合的顶层接口,不能被实例化
- Collections
- Collections是一个类,容器的工具类
- 用于操作集合,如list,set
- 常用方法:
- sort() -----(对集合进行排序,默认升序排序)
- reverse()-----(反转集合中元素)
- shuffle()----- (混淆集合中数据的顺序)
- swap(List list,int i,int j)-----(交换集合中i和j下标的数据)
- HashTable
- 和Hashtable一样,都实现了Map接口,都用键值对保存数据
- 区别:
- HashMap可以存放 null值,Hashtable不能存放null值
- HashMap不是线程安全的类,Hashtable是线程安全的类
- 几种Set
- Comparable接口
- 实现Comparable接口可以强行对实现它的每个类的对象进行整体排序
- 泛型
- 把类型当作是参数一样传递
- 在容器后面添加,Type可以是类,抽象类,接口
- 泛型类:在类的声明后加上一个
- 泛型转型
- 父类泛型不能转型为子类泛型
- 子类泛型不可以转换为父类泛型
- ArrayList
-
多线程
- 创建多线程
- 有3种方式创建多线程:
- 继承线程类:继承Thread,并且重写run方法
- 实现Runnable接口:实现Runnable接口,重写run方法,
借助线程对象的start()方法启动一个新的线程,new Thread(对象名).start() - 匿名类:继承Thread,重写run方法,直接在run方法中写业务代码
- 有3种方式创建多线程:
- 常用方法:
- sleep() -----当前线程休眠(暂停)
- join() -----加入到当前线程中
- setPriority() -----线程优先级
- setDaemon() -----守护线程, 当所有的线程都是守护线程时,当前进程结束
- 同步
- 使用synchronized关键字实现线程同步:
- synchronized(同步对象名称){
//此处的代码只有占有了同步对象后才可以执行
//在同一时间,只能被一个线程占有
} - 如果一个类,其方法都是有synchronized修饰的,那么该类就叫做线程安全的类
- 非线程安全的之所以会比线程安全的快,是因为不需要同步,省略了些时间
- StringBuffer 是线程安全的,StringBuilder 是非线程安全的
单线程用StringBuilder会更快些,多线程需要用StringBuffer保证数据的安全性 - 借助Collections.synchronizedList,可以把ArrayList转换为线程安全的List。
- synchronized(同步对象名称){
- 使用synchronized关键字实现线程同步:
- 死锁
- 产生条件
- 解决办法:
(1)预防死锁,破坏产生死锁的必要条件
(2)避免死锁,例如银行家算法(Banker Algorithm)。
(3)定期运行检测死锁算法对系统的状态进行检测,发现死锁便予以解除。
- 线程交互
- this.wait():让占有this的线程等待,并临时释放占用
- this.notify():唤醒等待在this的单个线程。
- this.notifyAll():唤醒等待在this的所有线程。
- wait方法和notify方法是Object上的方法,因为所有的Object都可以被用来作为同步对象
- 线程池
- 创建多线程