前言:
今天同学们对“java水池问题”都比较看重,朋友们都需要知道一些“java水池问题”的相关文章。那么小编在网络上汇集了一些关于“java水池问题””的相关资讯,希望姐妹们能喜欢,朋友们快快来了解一下吧!写在前面
正文开始之前先给大家讲一个面试题,题目是:“有两个水壶,一个能装6升水,一个能装5升水。还有一个不限量的水池。现在需要从水池中盛出3升水。”请问如何实现?别上网搜索先想想,这是我一个朋友最近在面试北京一家公司时被问到的一个问题。我感觉挺有趣的,咱们可以在评论区探讨一下。
数据结构系列文章我是抱着学习的心态来写的。如果有哪些地方写的不好的,解释不到位的,写的有问题的,希望大家可以提出来,帮我纠正。也希望可以和大家共同成长,一起进步。
那么什么是数据结构呢,不知道大家有没有一个概念?其实有一段时间我对所谓的“数据结构”一直是不理解的,我不太清楚它到底是个什么东西。不知道大家是不是也这样?如果有的话,那我们一起进入今天的文章。让我用我的理解来告诉你,什么是数据结构。
概述
数据结构是计算机组织、存储数据的方式。简单来说就是,数据按指定的规则进行存储,从而得到一个有固定存储格式的数据集合,就称之为“数据结构”。
为了深层次的了解,其实可以分为两个层面来理解:
1、数据元素的前后之间存在某种关系,这是从逻辑层面来讲的一种逻辑关系。我们可以将其称为数据的逻辑结构。常见的逻辑结构(和其介绍)如下:
集合:同一集合之间的元素存在关系,集合之外的数据之间是没有任何关系的。
线性结构:元素之间存在一对一的关系。
树形结构:元素之间存在一对多的关系。
图形结构:元素之间存在多对多的关系。
2、某一逻辑结构的数据在内存中存储的方式,我们可以将其称为数据的物理结构(存储结构)。常见的物理结构(和其介绍)如下:
顺序存储:
简介:在内存中开辟出一组地址连续的存储单元,用于存储数据元素。
优点:节省空间因为不用额外存储元素间的逻辑关系。查看数据元素快因为每个存储单元对应一个序号,每个序号存储一个数据元素。通过序号可以快速的查找到数据。
缺点:插入、删除数据慢因为每次执行此类操作都需要移动元素。
链式存储:
简介:在内存中开辟出一组任意地址的存储单元(地址可以连续,也可以不连续),用于存储数据。
缺点:占用空间大因为除了存储数据外需要额外存储和该元素有逻辑关系的元素所对应的地址。查看数据慢,因为需要从头依次查找,链式存储的地址值可能是不连续的,需要通过上一个数据查找下一个数据的存储地址。
优点:插入、删除数据速度快,因为不需要移动元素,只要改变数据中存储的相邻元素的地址值就可以实现。
索引存储:
简介:将数据和数据间的关系进行分别存储。存放数据间逻辑关系的区域称为索引区域。
优点:提高查询数据的速度,我们可以通过索引区域快速查找到其对应数据的物理地址。
缺点:需要额外维护索引区域,增加内存消耗。
哈希存储:
简介:哈希存储(散列存储)是存放在一块地址连续的存储区域的。元素的存储位置是将数据的关键值通过哈希算法计算得到的。
优点:查询速度快,因为数据的地址值是通过数据本身来决定的,知道地址就可以节省数据查找。
缺点:数据过多时,可能会产生哈希值冲突。
分类
按照数据的逻辑结构我们可以将其分为两大类,包括线性结构和非线性结构
线性结构:
特点:数据元素之间存在一对一的线性关系。
包括两大类:顺序存储结构和链式存储结构。
线性结构常见有:数组、队列、链表和栈。
非线性结构:
概述:线性结构之外的称为非线性结构(不在过多赘述)。
非线性机构包括:二维数组、多维数组、广义表、树结构、图结构。
这可是我连着好几天没休息,中午加班写出来的,感觉我写的还不错的记得点赞,关注呦。之后我会详细介绍常用的几种数据结构。
如果有地方写的有问题的,希望大家可以给我指出。苦命的我要开始加班啦,哎周天也不能休息。
标签: #java水池问题