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)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在 ...
随机推荐
- Linux命令(1):date
查看时间: date "+%Y-%m-%d %H:%M:%S" 参数说明: %n : 下一行 %t : 跳格 %H : 小时(00..23) %I : 小时(01..12) %k ...
- ACM-ICPC 2018 沈阳赛区网络预赛-B,F,G
学长写的 F. Fantastic Graph "Oh, There is a bipartite graph.""Make it Fantastic." X ...
- Model Maker上手指南
Model Maker上手指南 目录 1.MM可爱的脸 2.MM中的工程Project 3.新建类图 4.添加类成员 5.实现类的方法 6.生成Delphi代码 7.逆向到模型 8.完全的逆向工程 作 ...
- beaglebone black 与电脑互传文件(夹)
1. PSCP方法 PSCP,是putty的一个组件. 1.1 下载PSCP 先给连接http://www.chiark.greenend.org.uk/~sgtatham/putty/downloa ...
- PAT_A1090#Highest Price in Supply Chain
Source: PAT A1090 Highest Price in Supply Chain (25 分) Description: A supply chain is a network of r ...
- React:styled-components
``是es6的Template Literals(模版字符串),许多人对这个一知半解,今天在这边总结下: `${expression}`(表达式插补) var x; var y; sth.innerH ...
- Pathfinding 模板题 /// BFS oj21413
题目大意: Description Bessie is stranded on a deserted arctic island and wants to determine all the path ...
- 【POJ】2387 Til the Cows Come Home
题目链接:http://poj.org/problem?id=2387 题意:求从1到n的最短路 题解:板子题.spfa. 代码: #include<iostream> #include& ...
- linux命令输出到屏幕的同时保存到文件
有时候无法在一个屏幕中打印出所有显示内容 可以使用以下命令: ifconfig | tee ifconfig.log more ifconfig.log
- github代码推送
git init // 初始化版本库 git add . // 添加文件到版本库(只是添加到缓存区),.代表添加文件夹下所有文件 git commit -m "first commit&qu ...