摘要:
前言 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。 B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。 与自平衡二叉查找树不同,B-树为系统最优 阅读全文
摘要:
一、简介 前面的文章说了缓冲区,说了通道,本文就来说说 NIO 中另一个重要的实现,即选择器 Selector。在更早的文章中,我简述了几种 IO 模型。如果大家看过之前的文章,并动手写过代码的话。再看 Java 的选择器大概就会知道它是什么了,以及怎么用了。选择器是 Java 多路复用模型的一个实 阅读全文
摘要:
一、简介 前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 – 套接字通道。在展开说明之前,咱们先来聊聊套接字的由来。套接字即 socket,最早由伯克利大学的研究人员开发,所以经常被称为Berkeley sockets。UNIX 4.2BSD 内核版本中加入了 socket 的实现,此后, 阅读全文
摘要:
一、简介 通道是 Java NIO 的核心内容之一,在使用上,通道需和缓存类(ByteBuffer)配合完成读写等操作。与传统的流式 IO 中数据单向流动不同,通道中的数据可以双向流动。通道既可以读,也可以写。 Java NIO 出现在 JDK 1.4 中,由于 NIO 效率高于传统的 IO,所以 阅读全文
摘要:
一、简介 java NIO相关类在jdk1.4被引入,用于提高I/O的效率。java NIO包含很多东西,但核心的东西不外乎Buffer、channel和selector。本文先来看Buffer的实现。 二、继承体系 Buffer 的继承类比较多,用于存储各种类型的数据。包括 ByteBuffer、 阅读全文
摘要:
一、简介 本文向大家介绍五种I/O模型。分别是阻塞I/O、非阻塞I/O、I/O复用、信号驱动式I/O、异步I/O等。内容参考《UNIX网络编程》,大家想进深入学习网络编程,建议去读读这本书。 二、模型介绍 (一)、阻塞I/O模型 阻塞I/O是最简单的I/O,一般表现为进程或线程等待某个条件,如果条件 阅读全文
摘要:
问题 (1)LinkedHashSet的底层使用什么存储元素? (2)LinkedHashSet与HashSet有什么不同? (3)LinkedHashSet是有序的吗? (4)LinkedHashSet支持按元素访问顺序排序吗? 源码分析 LinkedHashSet继承自HashSet,让我们直接 阅读全文
摘要:
一、概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。 除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。 在实现上,Li 阅读全文
摘要:
这个TreeSet其实和HashSet类似。HashSet底层是通过HashMap实现的,TreeSet其实底层也是通过TreeMap实现的。 简介 TreeSet的作用是保存无重复的数据,不过还对这些数据进行了排序。 TreeMap的底层是通过红黑树实现的,所以TreeSet底层也是通过红黑树实现 阅读全文
摘要:
简介 TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。TreeMap 阅读全文