首页>>新闻资讯>>行业新闻

教你运用数据结构和几个接口的区别
   来源:    添加日期:2019-09-18    

       数据结构复杂多样,你能否熟练有度的掌握每一种结构,运用每一种接口方式?随着互联网发展的迅速,软件开发的要求也是越来越高,各种需要实现的功能能否运用简单的模式进行实现。来带你了解一些基础知识:
1、栈是一种特殊的线性表,只允许在固定的一端进行插入和删除操作(后进先出)。又分为压栈、出栈和实现。
1)压栈:站的插入操作,入数据在栈顶

2)出栈:站的删除操作。出数据在栈顶

3)实现:顺序表和链表
利用顺序表实现,即使用尾插加尾删的方式实现;利用链表实现,则头尾皆可。

2、队列指只允许在一端进行插入数据操作,在另一端进行删除数据操作的线性表(先进先出)。

1)实现:数组和链表相结合,用栈实现队列 用队列实现栈。

3、二叉树指一个根结点加上两颗分别称为左子树和右子树的二叉树组成。
1)特点: 每个结点最多有两棵子树,即二叉树不存在度大于2的结点
二叉树的子树有左右之分,其子树的次序不能颠倒
2)两种特殊的二叉树:完全二叉树、满二叉树
完全二叉树:对于深度为K的,有n个节点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点满二叉树:每一个层的结点数都达到最大值。层数为k,且结点数为(2^k)-1
3) 二叉树的遍历:前序,中序,后序
前序:根左右 中序:左根右 后序;左右根。
4、List
List接口:存储的是有序的不唯一(可以重复)的数据

常用list有:ArrayList,LinkedList。
ArrayList:底层是Object数组实现的:由于数组的地址是连续的,数组支持O(1)随机访问;数组在初始化时需要指定容量;数组不支持动态扩容,像ArrayList、Vector和Stack使用的时候看似不用考虑容量问题(因为可以一直往里面存放数据);但是它们的底层实际做了扩容;数组扩容代价比较大,需要开辟一个新数组将数据拷贝进去,数组扩容效率低;适合读数据较多的场合
LinkedList:底层使用一个Node数据结构,有前后两个指针,双向链表实现的。相对数组,链表插入效率较高,只需要更改前后两个指针即可;另外链表不存在扩容问题,因为链表不要求存储空间连续,每次插入数据都只是改变last指针;另外,链表所需要的内存比数组要多,因为他要维护前后两个指针;它适合删除,插入较多的场景。数组和链表的特性差异,本质是:连续空间存储和非连续空间存储的差异。
5、Set
HashSet存储的是无序的、唯一(不可重复)的数据。是一组key的集合,但不存储value。由哈希表支持(实际上是一个HashMap集合)。HashSet集合不能保证的迭代顺序与元素存储顺序相同,保证元素唯一性的方式依赖于:hashCode()与equals()方法。

保证唯一性:使用HashCode算法,获取对象在内存中存放的位置。如果没有,就会将对象存储这个位置。如果有(对象的hashCode一样),调用equals()方法,如果equals比较属性一样,不会添加后元素,否则会添加后元素。

自定义的对象:如果我们往集合中存放自定义的对象,那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。
6、Map
Map是一种以键值对存储数据的容器,以哈希表(hashtable)作为底层数据结构实现的,我们叫做HashMap。HashMap是借助了键值Key的hashcode值来组织存储,将键值对封装成一个Entry对象。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

       今天你学会了吗?软件开发就联系睿格软件吧,睿格软件多年来专注于定制开发党建系统综治平台,各种软件。智慧党建


睿格软件

服务热线

0371-56086616

13213119956(24小时)

微信客服

点击或微信扫一扫
马上联系

收起 >