JAVA数据结构之数组
接下来的几篇博文会在最近仔细研读数据结构与算法的书籍后会摘录一些要点和总结一些自己的心得体会,帮助大家更深入地理解java中的数据结构和一些基本的算法,同时巩固自己数据结构和算法这些最基础的计算机知识
在Java语言中有两种数据类型基本数据类型和对象类型。Java不同于C++,java语言不将数组作为基本的数据类型,而是将数组作为引用数据类型,创建时需要使用new的方式创建数组
创建数组的方式两种 int[] intArray = new int[100] ,int intArray[] = new int[100] 声明数组最好使用第一种方式,能够清楚地说明[]是数据类型的一部分,而不是变量名的一部分。像很多编程语言一样数组一旦创建长度就不能改变了
数组初始化:如果尝试访问一个含有null的数组数据项,程序会出现空指针异常(主要是为了在访问某个数据项之前保证对其已经赋值),从而有一种简单的方式来声明数组,创建数组的同时完成了数组的初始化
int[] intArray = {1,2,3,4,5,6,7}
允许重复和不允许重复数组的比较
二分法查找能体现出有序数组的好处,这种查找比线性查找快很多,尤其是对大数组来说更为显著。
有序数组的优缺点
- 在查找元素方面比无序数组快多了,同时在插入操作中由于所有靠后的数据都需移动以腾开空间所以有序数组相对于无序数组插入操作速度慢
- 有序数组和无序数组的删除操作都需要把当前删除元素的的数据向前移动来填补已经删除的数据项的漏洞,所以说两种数组的删除都很慢
此处简单地介绍一下我们常用的一种使用大O法表示运行时间
大O法表示运行时间的意思是:首先我们举个例子,我们知道无序数组查找特定的数据项所需要的平均的比较次数为数据项总数的一半,若设N为数据项总数,搜索时间T与N/2成正比,可得 T = K*N/2 (其中K为一次比较所花的时间,即一个常量)
二分查找与log(N)成正比 我们已知二分查找所需时间公式为 T = K*log2(N) 时间与以2为底N的对数成正比,我们知道对数的特性,所有的对数和其他的对数都成比例,所以上面的时间公式可以换算成 T = K*log(N)
大O表示法即不在乎常数,只在乎运行时间和N的变化关系,大O表示法使用大写的字母O,可以认为是“order of”(大约是),我们可以用大O法来描述线性查找使用了O(N)级时间,二分法查找使用了O(logN)级时间,向无序数组插入使用了O(1),或者说是常数级时间。
一些算法使用大O法表示运行时间
对数组有了基本的了解之后,似乎仅仅使用数组就可以完成所有的工作,但由于有序数组和无序数组都不能达到一个我们想要的查找插入和删除都达到一个理想的效率,所以我们要需求新的数据类型来尽量达到我们的需求,当然这是以程序的复杂度作为代价的,数组还有一个很大的问题是数组的大小是固定的,通常我们设计程序时是不知道有多少数据存入我们的数组的,所以这样的程序就会有可能造成内存空间的浪费或者数组溢出的危险。
更灵活的数据结构可以随插入的数据项而扩展大小,比如说我们常说的链表的数据结构
java中有一个类叫Vector用起来很像数组,但是他可以扩展,这些功能是以效率作为代价的(实现原理是,在插入数据的时候内部数组将要溢出的时候,会创建一个新的数组,把旧数组的内容复制到新数组中去,然后再插入新的数据项,从而实现了可扩展)
JAVA数据结构之数组的更多相关文章
- JAVA数据结构--Array数组实现
所谓数组,是有序的元素序列. [1] 若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数字编 ...
- Java 数据结构之数组
public class Arrays { //创建一个Integer空数组 public static Integer[] player=null; //添加球员号码 pri ...
- Java数据结构和算法(二)——数组
上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要 ...
- Java数据结构和算法 - 数组
Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new ...
- Java数据结构和算法(二):数组
上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要 ...
- 【学习总结】java数据结构和算法-第三章-稀疏数组和队列
相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...
- 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解
数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...
- Java数据结构和算法之数组与简单排序
一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ...
- Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用
Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在 ...
随机推荐
- CSP-S 2019 —— 一个精神病人的呓语
此生无悔入OI(话说上次的“此生无悔”还是在B站上发的弹幕2333. $HZOI$们,我们要加油!QwQ (挖坑 写在前面 学了一年,拿了$160$,也无所谓,失败者不会被人记住. 最后想做的,就是把 ...
- GTK+/GNOME编程(一)
1.开发环境:安装GTK+/GNOME库 #apt-get install gtk+-3.0 (安装GTK+库文件) #apt-get install gnome- ...
- 转-pycharm建立项目
转自:https://blog.csdn.net/m0_37544464/article/details/79171913 本文针对环境已经配置好的Pycharm建立新项目 1.第一步 2.第二步 在 ...
- PAT_A1064#Complete Binary Search Tree
Source: PAT A1064 Complete Binary Search Tree (30 分) Description: A Binary Search Tree (BST) is recu ...
- 剑指offer——02二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 简单的spring--mvc整合
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 用mapreduce实现将mysql数据导出到HDFS上
因为业务需要,需要将一批mysql数据导入到HBASE,现在先将数据从Mysql导出到HDFS. 版本:hadoop CDH4.5,Hbase-0.946 1.实体类 YqBean 是我的实体类,请根 ...
- python学习5—一些关于基本数据结构的练习题
python学习5—一些关于基本数据结构的练习题 # 1. use _ to connect entries in a list # if there are no numbers in list l ...
- 【leetcode题目整理】数组中找子集
368. Largest Divisible Subset 题意:找到所有元素都不同的数组中满足以下规则的最大子集,规则为:子集中的任意两个元素a和b,满足a%b=0或者b%a=0. 解答:利用动态规 ...
- .net下MVC中使用Tuple分页查询数据
主要是在DAL层写查询分页的代码. 例如DAL层上代码: public Tuple<List<WxBindDto>, int> GetMbersInfo(int start, ...