二叉查找树/平衡二叉树/红黑树


由于接下来我们要学习的几种集合类型: TreeMap 、 TreeSet 、 LinkedHashMap 、 LinkedHashSet 、 EnumMap 、 EnumSet 都会基于一些基本的数据结构,例如:二叉查找树、AVL、红黑树等,因此在学习之外,我们有必须要再复习一下这些基础的数据结构知识。

阅读全文 »

概述


在上一篇文章中,我们介绍了 HashMap ,其中 keySet 和 entrySet 返回的是 Set 接口。本篇文章中,我们重点介绍 Set 接口的另外一个重要的实现类 HashSet 。

阅读全文 »

Map & Set 概述


通过前面几个章节的介绍,我们学习了 ArrayList , LinkedList ,ArrayDeque ,这几个列表和队列的集合类型有一个共同的缺点:查找元素( 这里的查找不是指根据索引位置来访问元素 )的效率较低,时间复杂度都基本为: O(N) 。从本篇文章开始,我们会介绍各种 Map 和 Set ,其查找效率会远远高于列表和队列。 Map 与 Set 都是接口类型,有多种不同的实现:

HashMap 、 HashSet 、 TreeMap 、 TreeSet 、 LinkedHashMap 、 LinkedHashSet 、 EnumMap 、 EnumSet

我们先从最为常用的 HaspMap 开始。

阅读全文 »

概述


LinkedList 实现了队列接口 Queue 和双端队列接口 Deque ,Java 容器类中还有一个双端队列的实现类 ArrayDeque ,它是基于数组实现的。一般来说,由于需要移动元素,数组的插入和删除效率会非常低,但 ArrayDeque 的效率却非常高,本章我们就来讨论一下它具体是如何实现的。

阅读全文 »

如何扩容?


add() 方法

在调用 add 方法时,会调用 ensureCapacityInternal(size + 1); 方法

1
2
3
4
5
6
7
private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
阅读全文 »

TCP 协议 keepalive


概述

TCP keepalive 在很多场景下都不是必须的,但是在某些特定的场景下,这个特性却会是非常有用。我们从 TCP keepalive 这个名字就可以大概理解这个特性的作用: keep tcp alive 。我们可以通过检查我们的 socket(TCP sockets) 来判断网络连接是不是正常的( running or broken )。

阅读全文 »