没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
more
CoreJava
资料
微软用户
[选取日期]
1
目录
集合 ........................................................................................................................................................................................................................... 2
ArrayList 和 LinkedList ............................................................................................................................................................................................... 2
HashMap 原理 .......................................................................................................................................................................................................... 5
hashMap、hashTable、treeMap 的区别 .......................................................................................................................................................... 6
hashMap,hashTable, ConcurrentHashMap ................................................................................................................................................................ 7
Object 类中有几个方法 .......................................................................................................................................................................................... 8
乱码问题 ................................................................................................................................................................................................................... 8
java8 特性 ................................................................................................................................................................................................................. 9
TPS&QPS .................................................................................................................................................................................................................. 10
什么是线程安全 ..................................................................................................................................................................................................... 10
Callable 接口和 Runnable .................................................................................................................................................................................... 11
wait 方法和 sleep .................................................................................................................................................................................................... 11
线程池 四种创建方式 ........................................................................................................................................................................................... 11
Java 多线程基础 ..................................................................................................................................................................................................... 11
并行与并发: ................................................................................................................................................................................................. 11
线程状态 ......................................................................................................................................................................................................... 12
monitor ............................................................................................................................................................................................................ 12
volatile ............................................................................................................................................................................................................. 14
先补充一下概念:Java 内存模型中的可见性、原子性和有序性。 ................................................................................................. 14
Volatile 原理 ............................................................................................................................................................................................ 15
当一个变量定义为 volatile 之后,将具备两种特性: ...................................................................................................................... 16
线程启动编码 ................................................................................................................................................................................................. 16
等待/通知机制 ................................................................................................................................................................................................ 17
notify 和 notifyAll 的区别 ............................................................................................................................................................................... 18
Thread.join()的使用 ........................................................................................................................................................................................ 18
Thread 类相关方法 ......................................................................................................................................................................................... 18
高级多线程控制类 ......................................................................................................................................................................................... 18
1.ThreadLocal 类 ................................................................................................................................................................................... 18
2.原子类(AtomicInteger、AtomicBoolean……) ........................................................................................................................... 19
3.Lock 锁 ................................................................................................................................................................................................ 19
4.容器类 .................................................................................................................................................................................................. 20
5.管理类 .................................................................................................................................................................................................. 21
ThreadPoolExecutor 工作原理 ............................................................................................................................................................................ 21
分布式环境下,怎么保证线程安全...................................................................................................................................................................... 22
乐观锁悲观锁 ......................................................................................................................................................................................................... 23
CAS........................................................................................................................................................................................................................... 25
CAS 无锁实现原理 .......................................................................................................................................................................................... 25
CAS 原理分析 .................................................................................................................................................................................................. 25
jdk 中的 CAS 实现 ........................................................................................................................................................................................... 27
JVM 中的 CAS .................................................................................................................................................................................................. 27
CAS 缺点 .......................................................................................................................................................................................................... 27
重载和重写 ............................................................................................................................................................................................................. 28
http 请求过程 ......................................................................................................................................................................................................... 29
classLoader 加载过程 ............................................................................................................................................................................................. 30
ClassLoader 概念 ............................................................................................................................................................................................. 30
2
JVM 平台提供三层 classLoader ...................................................................................................................................................................... 31
ClassLoader 加载类的过程 ............................................................................................................................................................................. 32
实现类的热部署 ............................................................................................................................................................................................. 32
NIO ........................................................................................................................................................................................................................... 32
理解与使用 ..................................................................................................................................................................................................... 32
深入理解 NIO .................................................................................................................................................................................................. 41
集合
ArrayList 和 LinkedList
1.ArrayList 是实现了基于数组的数据结构,LinkedList 基于链表的数据结构。
2.对于随机访问 get 和 set,ArrayList 觉得优于 LinkedList,因为 LinkedList 要移动指针。
3.对于新增和删除操作 add 和 remove,LinedList 比较占优势,因为 ArrayList 要移动数据。
4.ArrayList 默认长度 10,扩容为(原始*0.5)+1
List 元素是有序的、可重复
ArrayList、Vector 默认初始容量为 10
Vector:线程安全,但速度慢
底层数据结构是数组结构
加载因子为 1:即当 元素个数 超过 容量长度 时,进行扩容
扩容增量:原容量的 1 倍
如 Vector 的容量为 10,一次扩容后是容量为 20
ArrayList:线程不安全,查询速度快
底层数据结构是数组结构
扩容增量:原容量的 0.5 倍+1
如 ArrayList 的容量为 10,一次扩容后是容量为 16
ArrayList 和 Vector 使用了数组的实现,可以认为 ArrayList 或者 Vector 封装了对内部数组的操作,比如向数组中添加,删除,插入新的
元素或者数据的扩展和重定向。
LinkedList 使用了循环双向链表数据结构。与基于数组 ArrayList 相比,这是两种截然不同的实现技术,这也决定了它们将适用于完全不
同的工作场景。
LinkedList 链表由一系列表项连接而成。一个表项总是包含 3 个部分:元素内容,前驱表和后驱表,如图所示:
3
在下图展示了一个包含 3 个元素的 LinkedList 的各个表项间的连接关系。在 JDK 的实现中,无论 LikedList 是否为空,链表内部都有一个
header 表项,它既表示链表的开始,也表示链表的结尾。表项 header 的后驱表项便是链表中第一个元素,表项 header 的前驱表项便
是链表中最后一个元素。
下面以增加和删除元素为例比较 ArrayList 和 LinkedList 的不同之处:
增加元素到列表尾端:
只要 ArrayList 的当前容量足够大,add()操作的效率非常高的。只有当 ArrayList 对容量的需求超出当前数组大小时,才需要进行扩
容。扩容的过程中,会进行大量的数组复制操作。而数组复制时,最终将调用 System.arraycopy()方法,因此 add()操作的效率还是相当
高的。
LinkeList 由于使用了链表的结构,因此不需要维护容量的大小。从这点上说,它比 ArrayList 有一定的性能优势,然而,每次的元素增
加都需要新建一个 Entry 对象,并进行更多的赋值操作。在频繁的系统调用中,对性能会产生一定的影响
增加元素到列表任意位置
除了提供元素到 List 的尾端,List 接口还提供了在任意位置插入元素的方法:void add(int index,E element);
由于实现的不同,ArrayList 和 LinkedList 在这个方法上存在一定的性能差异,由于 ArrayList 是基于数组实现的,而数组是一块连续
的内存空间,如果在数组的任意位置插入元素,必然导致在该位置后的所有元素需要重新排列,因此,其效率相对会比较低。
可以看到每次插入操作,都会进行一次数组复制。而这个操作在增加元素到 List 尾端的时候是不存在的,大量的数组重组操作会
导致系统性能低下。并且插入元素在 List 中的位置越是靠前,数组重组的开销也越大。
而 LinkedList 此时显示了优势:
可见,对 LinkedList 来说,在 List 的尾端插入数据与在任意位置插入数据是一样的,不会因为插入的位置靠前而导致插入的方法性能降
低。
删除任意位置元素
对 ArrayList 来说,remove()方法和 add()方法是雷同的。在任意位置移除元素后,都要进行数组的重组并且删除的位置越靠前,数
组重组时的开销越大
在 LinkedList 的实现中,首先要通过循环找到要删除的元素。如果要删除的位置处于 List 的前半段,则从前往后找;若其位置处于后半
段,则从后往前找。因此无论要删除较为靠前或者靠后的元素都是非常高效的;但要移除 List 中间的元素却几乎要遍历完半个 List,在
List 拥有大量元素的情况下,效率很低
查询:
LinkedList 采用的是链表,
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
4
this.prev = prev;
}
}
每个节点都会保存前一个和后一个节点。现在来看一下它是如何进行查找的
/**
* Returns the element at the specified position in this list.
* @param index index of the element to return
* @return the element at the specified position in this list
* @throws IndexOutOfBoundsException {@inheritDoc}
*/
public E get(int index) {
checkElementIndex(index);
return node(index).item;
}
最后调用了 node(int index)方法
/**
* Returns the (non-null) Node at the specified element index.
*/
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
通过循环,把当前节点指向上一个或者下一个,来找到索引位置的节点。
ArrayList 采用的是数组,数组有明确的下表,所以查找很快。
/**
* Returns the element at the specified position in this list.
*
* @param index index of the element to return
* @return the element at the specified position in this list
* @throws IndexOutOfBoundsException {@inheritDoc}
*/
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
@SuppressWarnings("unchecked")
E elementData(int index) {
剩余42页未读,继续阅读
资源评论
南巷Dong
- 粉丝: 3381
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Flume进阶-自定义拦截器jar包
- Dubins曲线算法讲解和在运动规划中的使用.pdf
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功