接下来的几篇博文会在最近仔细研读数据结构与算法的书籍后会摘录一些要点和总结一些自己的心得体会,帮助大家更深入地理解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}

允许重复和不允许重复数组的比较

  二分法查找能体现出有序数组的好处,这种查找比线性查找快很多,尤其是对大数组来说更为显著。

  有序数组的优缺点

  1. 在查找元素方面比无序数组快多了,同时在插入操作中由于所有靠后的数据都需移动以腾开空间所以有序数组相对于无序数组插入操作速度慢
  2. 有序数组和无序数组的删除操作都需要把当前删除元素的的数据向前移动来填补已经删除的数据项的漏洞,所以说两种数组的删除都很慢

  此处简单地介绍一下我们常用的一种使用大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数据结构之数组的更多相关文章

  1. JAVA数据结构--Array数组实现

    所谓数组,是有序的元素序列. [1]  若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数字编 ...

  2. Java 数据结构之数组

    public class Arrays {    //创建一个Integer空数组    public static Integer[] player=null;    //添加球员号码    pri ...

  3. Java数据结构和算法(二)——数组

    上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要 ...

  4. Java数据结构和算法 - 数组

    Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new ...

  5. Java数据结构和算法(二):数组

    上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要 ...

  6. 【学习总结】java数据结构和算法-第三章-稀疏数组和队列

    相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...

  7. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  8. Java数据结构和算法之数组与简单排序

    一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ...

  9. Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用

    Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在 ...

随机推荐

  1. hdu4126_hdu4756_求最小生成树的最佳替换边_Kruskal and Prim

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:  Portal: hdu4126 hdu4756  原题目 ...

  2. 微信-小程序-开发文档-服务端-接口调用凭证:auth.getAccessToken

    ylbtech-微信-小程序-开发文档-服务端-接口调用凭证:auth.getAccessToken 1.返回顶部 1. auth.getAccessToken 本接口应在服务器端调用,详细说明参见服 ...

  3. 关于resin的一个错误,Resin 启动报错,访问页面500

    背景 客户集成javaagent报错,客户用的是resin,在本地复现问题,修改了bug,其中在resin中发布war包遇到的错误. 完整错误 500 [show] WEB-INF/web.xml:5 ...

  4. [转]关于tomcat 中的 tomcat-users.xml 配置不生效原因

    安装完tomcat,或者解压完tomcat后,在tomcat的目录下有个conf文件夹,在这个文件夹下面有一个tomcat- users.xml的文件,这个文件里面的配置信息是当我们进入http:// ...

  5. POJ 1159 Palindrome-最长公共子序列问题+滚动数组(dp数组的重复利用)(结合奇偶性)

    Description A palindrome is a symmetrical string, that is, a string read identically from left to ri ...

  6. NodeJS学习笔记之Connect中间件模块(二)

    一,开篇分析 大家好,今天这篇文章主要是对"Connect"中间件以及相关辅助中间件,做一个源码分析系列,我想上一篇文章大家也看了, 介绍了使用方式及用途,而这篇也是出于本人的兴趣 ...

  7. 今天真的很SB

    在公司Review系统网页上,写了一篇几百字的作文, 然后突然手一抖,竟然没有保存就切换页面了, 赶快退回来...没了,啥都没了... 怎么办... 还好洒家N久之前看了一本什么什么杂七杂八的书, 里 ...

  8. ES6 学习 -- let const

    看过很多大佬的ES6笔记,总结一下学习后的收获,给自己当作一个笔记用用: ES3.ES5定义变量有两种方法:var 和 function ES6定义变量有var.function.let.const等 ...

  9. pandas中series求交集

    在进行数据探索的时候会遇到求交集的情况,比如说:优惠卷预测的时候,有多张表,表1有用户id,表2也有用户id,但是不能确定表1的用户有多少出现在表2当中. un_id1,un_id2 为两个 Seri ...

  10. JS事件 鼠标经过事件(onmouseover)鼠标经过事件,当鼠标移到一个对象上时,该对象就触发onmouseover事件,并执行onmouseover事件调用的程序。

    鼠标经过事件(onmouseover) 鼠标经过事件,当鼠标移到一个对象上时,该对象就触发onmouseover事件,并执行onmouseover事件调用的程序. 现实鼠标经过"确定&quo ...