Skip to content

Commit e1e8c8e

Browse files
author
择善
committed
修改格式
1 parent 6b04140 commit e1e8c8e

4 files changed

Lines changed: 356 additions & 366 deletions

File tree

Java应届生面试突击/Java基础/02_Java中的集合类.md

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
    
2121
ArrayList 不具有线程安全性,用在单线程环境中。LinkedList 也是线程不安全的,**
2222
果在并发环境下使用它们**, 可 以 用 Colletions 类 中 的 静 态 方 法 **synchronizedList()**
23-
ArrayList 和 LinkedList 进行调用即可。
23+
ArrayList 和 LinkedList 进行调用即可。<br>
2424
&ensp;&ensp;&ensp;&ensp;
2525
**Vector 是线程安全的**,即它的大部分方法都包含有关键字 synchronized。Vector 的效
2626
率没有 ArrayList 和 LinkedList 高。
@@ -112,7 +112,7 @@ Vector 或 ArrayList 都可以。如果是对其它**指定位置的插入、删
112112
&ensp;&ensp;&ensp;&ensp;
113113
再哈希,其目的是为了减少哈希冲突,使元素能够均匀的分布在数组上,从而提高数
114114
组的存取效率。 <br>
115-
**扩展:为何数组的长度是 2 的 n 次方呢?**
115+
**扩展:为何数组的长度是 2 的 n 次方呢?** <br>
116116
&ensp;&ensp;&ensp;&ensp;
117117
1. 这 个 方 法 非 常 巧 妙 , 它 通 过 h & (table.length -1) 来 得 到 该 对 象 的 保 存 位 , 而
118118
HashMap 底层**数组的长度总是 2 的 n 次方**,2 n -1 得到的二进制数的每个位上的值都为 1,
@@ -298,16 +298,15 @@ k , V v, HashEntry next) 来创建的。如果另一个线程刚好 new 这个
298298
注意:由于只能在表头插入,所以链表中节点的顺序和插入的顺序相反。 <br>
299299
**3.remove(Object key)的实现** <br>
300300
&ensp;&ensp;&ensp;&ensp;
301-
下面来分析 remove 操作,先让我们来看看 remove 操作的源代码实现。 <br>
301+
下面来分析 remove 操作,先让我们来看看 remove 操作的源代码实现。 <br>
302302
![图02_2_15](/data/images/Java应届生面试突击/Java基础/02_2_16.png) <br>
303-
![图02_2_15](/data/images/Java应届生面试突击/Java基础/02_2_17.png) <br>
303+
![图02_2_15](/data/images/Java应届生面试突击/Java基础/02_2_17.png) <br>
304304
&ensp;&ensp;&ensp;&ensp;
305305
首先根据散列码找到具体的链表,然后遍历这个链表找到要删除的节点;
306306
最后把待删除节点之后的所有节点原样保留在新链表中,把待删除节点之前的
307307
每个节点克隆到新链表中。下面通过图例来说明 remove 操作。假设写线程执
308308
行 remove 操作,要删除链表的 C 节点,另一个读线程同时正在遍历这个链
309309
表。 <br>
310-
311310
图 4. 执行删除之前的原链表: <br>
312311
![图02_2_15](/data/images/Java应届生面试突击/Java基础/02_2_18.png) <br>
313312
图 5. 执行删除之后的新链表 <br>
@@ -416,14 +415,15 @@ private static final Object PRESENT = new Object(); <br>
416415
例如:假设存在两个线程(线程 1、线程 2),线程 1 通过 Iterator 在遍历
417416
集合 A 中的元素,在某个时候线程 2 修改了集合 A 的结构(是结构上面的修改,
418417
而不是简单的修改集合元素的内容),那么这个时候程序就会抛出
419-
ConcurrentModificationException 异常,从而产生 fail-fast 机制。
418+
ConcurrentModificationException 异常,从而产生 fail-fast 机制。<br>
420419
&ensp;&ensp;&ensp;&ensp;
421-
产生的原因:
420+
产生的原因:<br>
422421
&ensp;&ensp;&ensp;&ensp;
423422
当调用容器的 iterator()方法返回 Iterater 对象时,把容器中包含对象
424423
的个数赋值给了一个变量 expectedModCount,在调用 next()方法时,会比较
425424
expectedModCount 与容器中实际对象的个数是否相等,若二者不相等,则会抛
426-
出 ConcurrentModificationException 异常。
425+
出 ConcurrentModificationException 异常。<br>
426+
&ensp;&ensp;&ensp;&ensp;
427427
如果在遍历集合的同时,需要删除元素的话,可以用 iterator 里面的
428428
remove()方法删除元素。
429429

@@ -444,7 +444,7 @@ List 接口中常用类 <br>
444444
&ensp;&ensp;&ensp;&ensp;
445445
LinkedList :线程不安全。增删速度快。底层数据结构是链表 <br>
446446

447-
Set(集)元素无序的、不可重复。
447+
Set(集)元素无序的、不可重复。<br>
448448
&ensp;&ensp;&ensp;&ensp;
449449
取出元素的方法只有迭代器。不可以存放重复元素,元素存取是无序的。因此存入
450450
Set 中的每个对象都必须重写 equals()和 hashCode()方法来确保对象的唯一性。
@@ -475,3 +475,12 @@ key 时,需要重新改写该对象的 equals()和 hashCode()方法来确保 key
475475
Collections 是针对集合类的一个帮助类,*提供了操作集合的工具方法*:一系列**静态方法**
476476
实现对各种集合的**搜索、排序、线程安全化**等操作。
477477

478+
479+
480+
---
481+
### 搬运工信息
482+
Author:Jason Lou <br>
483+
Email:vip.[email protected] <br>
484+
Blog:https://blog.csdn.net/qq_21508727 <br>
485+
Github:https://github.com/JGPY/JavaGuideBooster <br>
486+
---

Java应届生面试突击/Java基础/03_设计模式相关.md

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,14 +165,34 @@ composite,template,absever 等。 <br>
165165
**3.工厂设计模式** <br>
166166
&ensp;&ensp;&ensp;&ensp;
167167
4.1 简单工厂模式 <br>
168-
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建出哪一
168+
简单工厂模式的实质是由一个工厂类根据传入的参数, 动态决定应该创建出哪一
169169
个产品类的实例。 <br>
170170
&ensp;&ensp;&ensp;&ensp;
171171
4.2 抽象工厂模式 <br>
172-
在这个模式中的几类角色,有抽象工厂,实体工厂,抽象产品,实体产品。 <br>
172+
在这个模式中的几类角色, 有抽象工厂, 实体工厂, 抽象产品, 实体产品。 <br>
173173
[http://www.cnblogs.com/suizhouqiwei/archive/2012/06/26/2563332.html](http://www.cnblogs.com/suizhouqiwei/archive/2012/06/26/2563332.html) <br>
174174
&ensp;&ensp;&ensp;&ensp;
175175
4.3 工厂方法模式 <br>
176176

177177
### <a name="4">4. 详细的设计模式内容</a>
178-
[24种设计模式介绍与6大设计原则.pdf](/data/books/24种设计模式介绍与6大设计原则.pdf)
178+
[24种设计模式介绍与6大设计原则.pdf](/data/books/24种设计模式介绍与6大设计原则.pdf)
179+
180+
Java 中一般认为有23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。 <br>
181+
下面列出了所有的设计模式。需要掌握的设计模式我单独列出来了,当然能掌握的越多越好。 <br>
182+
总体来说设计模式分为三大类: <br>
183+
创建型模式,共五种: <br>
184+
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 <br>
185+
结构型模式,共七种: <br>
186+
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 <br>
187+
行为型模式,共十一种: <br>
188+
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
189+
190+
191+
192+
---
193+
### 搬运工信息
194+
Author:Jason Lou <br>
195+
Email:vip.[email protected] <br>
196+
Blog:https://blog.csdn.net/qq_21508727 <br>
197+
Github:https://github.com/JGPY/JavaGuideBooster <br>
198+
---

0 commit comments

Comments
 (0)