java高频手撕_手撕JAVA(七)JAVA那些冷知识(下)

十、集合框架

1.两大接口

集合框架有两类接口collection、map。

fc15f52653a6e62006e55ab45ed3182b.png

collection类均实现collection。一开始collection接口内只有add、iterator两个方法,后来增加了一些常用方法:

e4c86e4990bfe167baaf76b5e5f6461a.png

2、迭代器

iterator方法返回一个iterator的实现类,该类专门用来对collection进行迭代。

JAVA中的iterator被认为是指向两个元素之间,调用next方法是返回上一个元素的引用指向,remove方法类似于键盘上的backspace删除键,会删除前一个元素:

ec4da3eeeb4c42a0cfec47c4d23f2ab2.png

由于collection和set都是用iterator来遍历,set里每个元素存放的位置都是必须走算法来确定的,肯定不能直接通过iterator以add的权利,让它走到哪儿就能在哪儿add。所以iterator并没有提供add方法。而是专门有一个iterator的子接口Listiterator接口来提供专门针对有序集合的add方法。Listiterator还在iterator的基础上增加了previous方法(向前遍历)。

3、接口+抽象类的设计模式

abstractCollection抽象类是因为拓展之后的collection接口方法实在是太多,实现起来太麻烦,因此JAVA设计者们专门设计了此类。此类实现了collection接口,抽象iterator、size两个方法,其余方法均给出了默认实现。集合框架的接口均遵循这一点,每一个接口均有一个对应的抽象类。

4、hash与tree

hash系集合框架均采用散列表,重要的是hashcode方法。

tree系结合框架均采用树,重要的是实现comparable接口,重写comparable方法。

关于hash的问题会在后续进阶的文章中单独有专题来写。

5、Collection工具类

为了应对线程同步、堆污染等一系列问题,设计者专门给出了Collection工具类,内含将collection转为线程安全和受查的一系列方法。

Collection工具类还内置了一些常用的查找排序算法,这一点是很多时候在面对collection编程的时候人们常常遗忘的。很多时候还舍近求远去花大量篇幅手动对集合类进行查找、排序。

十一、多线程

关于线程同步、阻塞队列等高级内容,以后会在并发编程相关的专题文章中单独再议(主要是笔者还没有看完JAVA核心技术卷二,哈哈哈哈~),此处只写一些多线程基础概念里面容易搞混淆的点。

程序:一段安装在磁盘上的指令集合。静态。

进程:运行中的程序。动态。每个进程有独立资源空间。程序每处理一个数据集,就会产生一个进程。所以一个程序可能有多个进程。

线程:进程是系统为程序运行开辟出来的内存空间,用来存放程序运行所需的各种原始资源——如数据、地址空间等,线程是真正干活的去争抢程序运行所需的各种系统资源的实体。

状态:

0e76dde3b1a042837fd7e9d71be41e2c.png

新创建:新鲜出炉,刚刚new出来的线程类。

可运行:调用start方法。(调用start()后,不一定马上执行,看是否争抢到CPU的时间片)

阻塞、等待:

阻塞状态是线程因为某种原因放弃CPU的使用权,暂时停止运行。阻塞状态分为以下几种:

1. 等待阻塞(watiting):运行的线程执行wait()方法,JVM会把该线程放入等待池中。

2. 超时等待阻塞(time-waiting):运行时的线程会执行带有超时时间的wait()方法,JVM会把该线程放入等待池中。当超时后,线程重新转入就绪状态,去锁池中争抢锁。

3. 同步阻塞(synchronized):运行时的线程获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

被终止:线程执行完正常死亡,或者遇到异常

等待和阻塞的区别:两者都表示线程暂停执行,严格来说等待算是阻塞状态中的其中一种。而两者的区别,首先要明确两个概念:

1.等待池

2.锁池

等待状态的线程会释放掉锁,全部进入等待池,被唤醒以后重新进入锁池与锁池中的线程竞争锁。如果没有竞争到锁就会继续留在锁池中,除非再遇到wait才会进入等待池中。

优先级

线程有优先级,调度器总是优先选择优先级高的线程执行。

但是优先级机制在实际效果中并不明显。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值