编程中常见的数据结构

1.List    链表--修改快

2.Set    集合

3.Array 数组 --更新快

4.Map   键值对

=======

Hash:基于散列具有Array与List的有点

=======

Queue:队列--线程共享资源(串行线程资源的封闭,采取的措施就是对共享资源加锁实现

    优先级队列

    FIFO队列

    同步移交队列 ----- 大量线程

    双端队列 -----------专有的任务队列,为空就会取其他队列尾部的任务去执行(工作密取)

工作模型:

  生产者-消费者模型

  线程池模型

Map:

  分段锁,提高并发量,而不是锁住整个Map

Set:

  写时复制:

    数据的快照,算是读写分离,读取操作不加锁,而写操作进行加锁,具有内存一致性,用户不需要自己同步

Tree:

  快速的数据结构组织格式,非常便于检索排序操作

时间: 2024-08-24 02:52:50

编程中常见的数据结构的相关文章

竞赛中常见的数据结构

这篇文章结合15pku暑期training的资料,简单介绍几种竞赛中常见的数据结构,包括线段树.树状数组.伸展树.后缀数组.并查集等. 需要点明的这,这个专栏的文章可以视作一个“预处理”,是作为笔者16年暑期pku集训的一个先导,因此拘于时间和精力很多知识点都是从整体上把握,缺少细节缺少证明也缺少代码实现,这些东西笔者会在以后的训练中详细的介绍出来. 线段树: 对于细胞和人口的指数级爆炸我们都很熟悉,而在算法设计当中,最忌讳的也是出现O(2^n)的时间复杂度,我们将这个计算过程视为正向,那么我们

一、javaSE (十七)set集合、Collection集合、针对Collection集合我们到底使用谁、在集合中常见的数据结构

1:set集合(理解) (1)Set集合的特点 无序,唯一 (2) Hashset集合(掌握) A:底层数据结构是哈希表(是一个元素为链表的数组) B:哈希表底层依赖两个方法: hashCode()和equals() 执行顺序 首先比较哈希值是否相同 相同:继续执行equals()方法 返回true:元素重复了,不添加 返回fa1se:直接把元素添加到集合 不同:就直接把元素添加到集合 C:如何保证元素唯一性的呢? 由 hashcode()和equals()保证的 D:开发的时候,代码非常的简单

Unity3D游戏开发之C#编程中常见数据结构的比较

一.前言 Unity3D是如今最火爆的游戏开发引擎,它可以让我们能轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型的互动内容.它支持2D/3D游戏开发,据不完全统计,目前国内80%的手机游戏都是用Unity3D开发. 由于Unity3D在开发过程中使用最多的是C# 语言,所以就要合理的使用C#提供的一些数据结构是非常有必要的,合理的选择数据结构可以加快开发速度,提高游戏运行性能,不合理的使用数据结构则会导致游戏运行性能降低,加大开发复杂程度! 先通过表格看看常用的数据结构: C#常用数据

Java 中常见的数据结构

1.数据结构有什么作用? 当使用 Java 里面的容器类时,你有没有想过,怎么 ArrayList 就像一个无限扩充的数组,也好像链表之类的.很好使用,这就是数据结构的用处,只不过你在不知不觉中使用了. 数据结构内容比较多,细细的讲解也是相对费功夫的,不可能达到一蹴而就.我就将常见的数据结构:堆栈.队列.数组.链表和红黑树 给大家介绍一下,作为数据结构的入门,了解一下它们的特点即可. 2.常见的数据结构 数据存储的常用结构有:栈.队列.数组.链表和红黑树. 栈 栈:stack,又称堆栈,它是运算

网络编程中常见错误码总结

在网络编程中,总有各种需要注意的环节,几乎每个API都要进行异常处理,判断返回值以及错误码来定位是否需要退出. 本文根据自身使用经验,总结以下错误码及其出现场景和一般处理流程. 网络编程的一般性流程如下 : 客户端 : socket -> connect -> write / read 服务端 : socket -> bind -> listen -> accept 还有因为设置属性带来的其它改变,比如非阻塞和套接字选项. EADDRINUSE : 如果你在同一个端口运行了无

Java中常见的数据结构的区别

把多个数据按照一定的存储方式,存储起来,称存储方式之为数据结构. 数据的存储方式有很多,数组,队列,链表,栈,哈希表等等. 不同的数据结构,性能是不一样的,比如有的插入比较快,查询比较快,但是删除比较慢. 有的删除比较快,插入比较快,但是查询比较慢. 根据实际操作,合理选择即可. ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于

网络编程中常见的5种I/O模型

I/O模型 Unix下共有五种I/O模型: 1>:阻塞I/O 2>:非阻塞I/O 3>:I/O多路复用 4>:信号驱动I/O 5>:异步I/O 其中前四种是同步I/O模型,只有第五种是异步的. 同步与异步: 这里的同步和两个实体之间通信中的同步的概念是不一样的,这里的同步是指关于这个I/O中的一系列动作都需要自己来完成,无论你是原地等待事件的发生(阻塞)还是当某个事件已经准备好的时候你去完成后面的的动作(非阻塞)都属于同步. 异步,它是指是调用另一个执行者去完成,当执行者发现

浅谈TCP/IP网络编程中socket的行为

我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: . TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) . Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为. . 编写Performant, Scalable的服务器程序.包括多线程.IO Multiplexing.非阻塞.异步等各种技术. 关于TCP/IP协议,建议参考Richard Stevens的<TCP/IP Illust

网络编程中的read,write函数

关于TCP/IP协议,建议参考Richard Stevens的<TCP/IP Illustrated,vol1>(TCP/IP详解卷1). 关于第二层面,依然建议Richard Stevens的<Unix network proggramming,vol1>(Unix网络编程卷1),这两本书公认是Unix网络编程的圣经. 至于第三个层面,UNP的书中有所提及,也有著名的C10K问题,业界也有各种各样的框架和解决方案,本人才疏学浅,在这里就不一一敷述. 本文的重点在于第二个层面,主要