一、线性表
1. 两种实现方式
- ArrayList底层逻辑是使用数组进行实现的,不支持线程同步,非线程安全
- LinkedList底层逻辑是使用List实现的,不支持线程同步,非线程安全
2. 比较
ArrayList
- 查找方便,可以根据index进行精准定位
- 增删麻烦,可能会设计到元素的移动,以及扩容等
LinkedList
- 查找不方便,需要进行遍历;
- 增删简单,但是前提是需要找到对应的元素的位置
最后
- 究竟使用哪个,还是需要根据实际场景来。查找频率高,建议使用ArrayList;增删频率高,建议使用LinkedList
二、队列和栈
在日常使用的时候,定义一个变量,通常都是使用的接口,而具体的实现则是有不同的定义
/**
*
* 1. 使用接口Queue来定义一个变量
* 2. 使用不同的数据结构来实现Queue
*/
//使用LinkedList来实现Queue
java.util.Queue<String> queue = new LinkedList<>();
//使用PriorityQueue来实现Queue
java.util.Queue<String> queue2 = new PriorityQueue<>();
1. 队列
queue 先进先出,可以使用LinkedList实现,当然还有其他的实现方式
public interface Queue<E> extends Collection<E>
2. 栈
stack 后进先出,可以使用ArrayList实现,当然也有其他的实现方式
public class Stack<E> extends Vector<E>
Vector 向量,类似于ArrayList,底层都是通过Array实现的,支持线程同步,在某个时刻只允许一个线程写,所以是线程安全的
PS
1. 线程同步和异步
- 线程同步:当线程请求资源时,如果没有得到响应,则线程阻塞,继续等待直到获得需要的资源
- 线程异步:当线程请求资源时,如果没有得到响应,则可以先请求其他资源