前言:
数据结构的分类
如果完全不懂数据结构,很难写出优秀的代码,有缺陷的底层数据结构容易导致系统风险高,可扩展性差,所以需要认真的对待数据结构进行设计和评审。
Java中通过集合框架封装了数据结构:集合框架通常包含这三点:
- 接口
- 实现
- 算法
集合框架的优点:
- 减少程序编程工作
- 增加程序编程速度和质量
- 允许不相关API之间的交互
- 减少和学习新的API的工作
- 减少设计新的api工作
- 培养软件的可重用性
- 一、线性结构:
0至1个直接前继和直接后继。当线性结构非空时候,有唯一的首元素和尾元素,除两者外,所有的元素都有唯一的直接前继和直接后继。线性结构包括顺序表,链表,栈表,队列等,其中栈和队列是访问受限的结构。栈是后进先出,LIFO,last-in,first-out,队列是先进先出FIFO.firtst-in,first-out- 二、树结构:
0至1个直接前继和0至n个直接后继(n大于或等于2)。树是一种非常重要的有层次的非线性数据结构,像自然界的树一样,由于树结构比较稳定和均衡,在计算机领域中得到广泛使用。- 三、图结构:
0至n个直接前继和直接后继(n大于或等于2)图结构包括简单图,多重图,有向图,和无向图等- 四、哈希结构:
没有直接前继和直接后继,哈希结构通过某种特定的哈希函数将索引和存储的值关联起来,是一种查找效率非常快的数据结构。
一、线性结构:
- 1.1-顺序表
- 1.2-链表
- 1.3-栈表
- 1.4-队列
- 1.4.1阻塞队列
BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。下图是
对这个原理的阐述:
一个线程往里边放,另外一个线程从里边取的一个 BlockingQueue 。
一个线程将会持续生产新对象并将其插入到队列之中,直到队列达到它所能容纳的临界点。
也就是说,它是有限的。如果该阻塞队列到达了其临界点,负责生产的线程将会在往里边插
入新对象时发生阻塞。它会一直处于阻塞之中,直到负责消费的线程从队列中拿走一个对象。
负责消费的线程将会一直从该阻塞队列中拿出对象。如果消费线程尝试去从一个空的队列中
提取对象的话,这个消费线程将会处于阻塞之中,直到一个生产线程把一个对象丢进队列。