Skip to content

Commit 36be328

Browse files
authored
Update 02_SortedSet_and_NavigableSet.md
1 parent 80daad6 commit 36be328

File tree

1 file changed

+5
-41
lines changed

1 file changed

+5
-41
lines changed

Diff for: ch13/02_SortedSet_and_NavigableSet.md

+5-41
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@
142142
```
143143

144144
![](13_4.png)
145+
145146
`13-5``NavigableSet`
146147

147148
这些类似于 `Deque` 中同名的方法(参见 `14.4` 节),并且有助于支持在需要队列功能的应用程序中使用 `NavigableSet`。 例如,在本节中待办事项管理器的版本中,我们可以通过以下方式从列表中获取最高优先级的任务:准备好执行的任务:
@@ -213,6 +214,7 @@
213214
```
214215

215216
![](13_5.png)
217+
216218
`13-6`。一个有序的,平衡的二叉树
217219

218220
如果迭代处理涉及对集合的结构更改,并且正在使用的实现是 `TreeSet`(它具有快速迭代器),那么我们将不得不使用显式迭代器来避免 `ConcurrentModificationException`
@@ -235,6 +237,7 @@
235237
在计算中,树是代表层次结构的分支结构。计算机树从系谱树中借用了很多术语,虽然有一些差异;最重要的是,在计算树中,每个节点只有一个父节点(除了没有的根节点)。在计算中经常使用的一类重要的树是二叉树 - 每个节点最多可以有两个孩子。图13-6显示了一个按照字母顺序包含这个句子的单词的二叉树的例子。
236238

237239
![](13_6.png)
240+
238241
`13-7`。 一个不平衡的二叉树
239242

240243
如果您查看任何非叶节点(例如,包含以下单词的节点),则可以看到此树的最重要属性:左侧下方的所有节点都包含按字母顺序排列的单词,右侧的所有单词随之而来。要找到一个单词,您需要逐级开始,逐级下降,在每个级别进行字母比较,因此检索或插入元素的成本与树的深度成正比。
@@ -282,9 +285,11 @@
282285
### ConcurrentSkipListSet
283286

284287
![](13_7.png)
288+
285289
`13-8`。 修改链接列表
286290

287291
![](13_8.png)
292+
288293
`13-9`。 搜索跳过列表
289294

290295
`ConcurrentSkipListSet` 作为第一个并发集合实现在 `Java 6` 中引入。它由跳过列表支持,跳过列表是上一节二叉树的现代替代方案。一个集合的跳过列表是一系列链表,每个链表都是由两个字段组成的一连串单元格:一个用于保存一个值,另一个用于保存对下一个单元格的引用。通过指针重新排列,元素在常量时间内插入和移出链表,如图 `13-8` 部分(`a`)和(`b`)所示。
@@ -311,44 +316,3 @@
311316
`EnumSet` 实现中,对于多于 `64` 个值的枚举类型,下一个最坏情况下的复杂度为 `O(log m)`,其中 `m` 是枚举中元素的数量。
312317

313318

314-
315-
316-
317-
318-
319-
320-
321-
322-
323-
324-
325-
326-
327-
328-
329-
330-
331-
332-
333-
334-
335-
336-
337-
338-
339-
340-
341-
342-
343-
344-
345-
346-
347-
348-
349-
350-
351-
352-
353-
354-

0 commit comments

Comments
 (0)