Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
e0b872f
Update J2EE基础知识.md
maokegithub Feb 17, 2019
937b9af
修改两个错别字
fanofxiaofeng Feb 19, 2019
5412af1
统一 loadFactor 名称为加载因子, 为resize中的注释添加//
Flyonsnow Feb 20, 2019
ee072f8
Update MySQL.md
jerryldh Feb 21, 2019
6d48422
Create BIO,NIO,AIO summary.md
Snailclimb Feb 21, 2019
2ef10c8
Merge branch 'master' of https://github.com/Snailclimb/Java_Guide
Snailclimb Feb 21, 2019
29b9857
Merge pull request #155 from jerryldh/patch-1
Snailclimb Feb 21, 2019
3748061
Merge pull request #153 from Flyonsnow/master
Snailclimb Feb 21, 2019
4f43d28
Merge pull request #151 from fanofxiaofeng/patch-4
Snailclimb Feb 21, 2019
10c72c1
Merge pull request #149 from maokegithub/patch-4
Snailclimb Feb 21, 2019
7bef9e4
ADD:待办事件
Snailclimb Feb 21, 2019
3d1cfcf
Update Java基础知识.md
Snailclimb Feb 21, 2019
3d4edde
Update Java基础知识.md
Snailclimb Feb 21, 2019
c2d24e8
UPDATE:待办事件
Snailclimb Feb 21, 2019
455041d
Add:BIO,NIO,AIO 总结
Snailclimb Feb 21, 2019
bdf8aa5
Update BIO,NIO,AIO summary.md
Snailclimb Feb 21, 2019
41a4fdf
Merge branch 'master' of https://github.com/Snailclimb/Java_Guide
Snailclimb Feb 21, 2019
4433a4b
Update BATJ都爱问的多线程面试题.md
MckayRen Feb 21, 2019
46429c7
HTTPS中的TLS
LiWenGu Feb 21, 2019
d40d121
Update BIO,NIO,AIO summary.md
Snailclimb Feb 22, 2019
44acccc
Update BIO,NIO,AIO summary.md
Snailclimb Feb 22, 2019
40f1838
servlet 自动刷新
Feb 23, 2019
aca7d24
在grow()中,对hugeCapacity()方法的解释错误
Feb 23, 2019
bfb0475
Revert "在grow()中,对hugeCapacity()方法的解释错误"
Feb 23, 2019
e62ee07
修改扩容(grow)部分,对于hugeCapacity()方法的解释
Feb 23, 2019
ebef8b3
Merge pull request #159 from fantasygg/wk-branch
Snailclimb Feb 23, 2019
cd7ca3f
Merge pull request #157 from LiWenGu/master
Snailclimb Feb 23, 2019
d6ca057
Merge pull request #156 from MckayRen/master
Snailclimb Feb 23, 2019
49148a3
Add:HTTPS中的TLS
Snailclimb Feb 23, 2019
f0d2b98
Merge pull request #160 from fantasygg/Arraylist
Snailclimb Feb 23, 2019
c36aea9
Update README.md
Snailclimb Feb 26, 2019
96e4063
Fix:错别字
Snailclimb Feb 26, 2019
15e7eb7
Update J2EE基础知识.md
Snailclimb Feb 26, 2019
0e9ed08
Fix:描述错误
Snailclimb Feb 26, 2019
d85f369
Update:get和post区别?
Snailclimb Feb 26, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Java相关/ArrayList-Grow.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@

```

细心的同学一定会发现 :**以无参数构造方法创建 ArrayList 时,实际上初始化赋值的是一个空数组。当真正对数组进行添加元素操作时,才真正分配容量。即向数组中添加第一个元素时,数组容量扩为10。** 下面在我们分析 ArrayList 扩容时会降到这一点内容
细心的同学一定会发现 :**以无参数构造方法创建 ArrayList 时,实际上初始化赋值的是一个空数组。当真正对数组进行添加元素操作时,才真正分配容量。即向数组中添加第一个元素时,数组容量扩为10。** 下面在我们分析 ArrayList 扩容时会讲到这一点内容

## 二 一步一步分析 ArrayList 扩容机制

Expand Down Expand Up @@ -308,7 +308,7 @@ ArrayList 源码中有一个 `ensureCapacity` 方法不知道大家注意到没

```

**最好在 add 大量元素之前用 `ensureCapacity` 方法,以减少增量从新分配的次数**
**最好在 add 大量元素之前用 `ensureCapacity` 方法,以减少增量重新分配的次数**

我们通过下面的代码实际测试以下这个方法的效果:

Expand Down Expand Up @@ -344,4 +344,4 @@ public class EnsureCapacityTest {

```

通过运行结果,我们可以很明显的看出向 ArrayList 添加大量元素之前最好先使用`ensureCapacity` 方法,以减少增量从新分配的次数
通过运行结果,我们可以很明显的看出向 ArrayList 添加大量元素之前最好先使用`ensureCapacity` 方法,以减少增量重新分配的次数
19 changes: 9 additions & 10 deletions Java相关/ArrayList.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

<!-- MarkdownTOC -->

- [ArrayList简介](#arraylist简介)
Expand All @@ -19,15 +18,15 @@
它继承于 **AbstractList**,实现了 **List**, **RandomAccess**, **Cloneable**, **java.io.Serializable** 这些接口。

在我们学数据结构的时候就知道了线性表的顺序存储,插入删除元素的时间复杂度为**O(n)**,求表长以及增加元素,取第 i 元素的时间复杂度为**O(1)**

  ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。

  ArrayList 实现了**RandomAccess 接口**,即提供了随机访问功能。RandomAccess 是 Java 中用来被 List 实现,为 List 提供**快速访问功能**的。在 ArrayList 中,我们即可以通过元素的序号快速获取元素对象,这就是快速随机访问。

  ArrayList 实现了**Cloneable 接口**,即覆盖了函数 clone(),**能被克隆**。

  ArrayList 实现**java.io.Serializable 接口**,这意味着ArrayList**支持序列化**,**能通过序列化去传输**。

  和 Vector 不同,**ArrayList 中的操作不是线程安全的**!所以,建议在单线程中才使用 ArrayList,而在多线程中可以选择 Vector 或者 CopyOnWriteArrayList。
### ArrayList核心源码

Expand Down Expand Up @@ -177,7 +176,7 @@ public class ArrayList<E> extends AbstractList<E>
newCapacity = minCapacity;
//再检查新容量是否超出了ArrayList所定义的最大容量,
//若超出了,则调用hugeCapacity()来比较minCapacity和 MAX_ARRAY_SIZE,
//如果minCapacity大于最大容量,则新容量则为ArrayList定义的最大容量,否则,新容量大小则为 minCapacity。
//如果minCapacity大于MAX_ARRAY_SIZE,则新容量则为Interger.MAX_VALUE,否则,新容量大小则为 MAX_ARRAY_SIZE。
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
Expand Down Expand Up @@ -631,7 +630,7 @@ public class ArrayList<E> extends AbstractList<E>
newCapacity = minCapacity;
//再检查新容量是否超出了ArrayList所定义的最大容量,
//若超出了,则调用hugeCapacity()来比较minCapacity和 MAX_ARRAY_SIZE,
//如果minCapacity大于最大容量,则新容量则为ArrayList定义的最大容量,否则,新容量大小则为 minCapacity。
//如果minCapacity大于MAX_ARRAY_SIZE,则新容量则为Interger.MAX_VALUE,否则,新容量大小则为 MAX_ARRAY_SIZE。
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
Expand All @@ -653,14 +652,14 @@ public class ArrayList<E> extends AbstractList<E>

3. .java 中的**size()方法**是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!


#### 内部类
```java
(1)private class Itr implements Iterator<E>
(2)private class ListItr extends Itr implements ListIterator<E>
(3)private class SubList extends AbstractList<E> implements RandomAccess
(4)static final class ArrayListSpliterator<E> implements Spliterator<E>
```
```
  ArrayList有四个内部类,其中的**Itr是实现了Iterator接口**,同时重写了里面的**hasNext()**,**next()**,**remove()**等方法;其中的**ListItr**继承**Itr**,实现了**ListIterator接口**,同时重写了**hasPrevious()**,**nextIndex()**,**previousIndex()**,**previous()**,**set(E e)**,**add(E e)**等方法,所以这也可以看出了**Iterator和ListIterator的区别:**ListIterator在Iterator的基础上增加了添加对象,修改对象,逆向遍历等方法,这些是Iterator不能实现的。
### <font face="楷体" id="6"> ArrayList经典Demo</font>

Expand Down
Loading