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

    javac -classpath ./wxpay-sdk-0.0.3.jar HttpsTest2.java java -cp .:./wxpay-sdk-0.0.3.jar HttpsTest2

  2. LeetCode 1041. Robot Bounded In Circle (困于环中的机器人)

    题目标签:Math 题目让我们判断机器人是否是一直在走一个圈. 当我们把 instructions 走完一遍时候: 1. 如果机器人回到了原点,那么它是在走一个圈. 2. 如果机器人的方向没有改变,那 ...

  3. Devstack — screen 调试工具的使用

    目录 目录 为什么要使用 screen 工具 启动 screen screen 的切换常用 退出和重新连接 screen Restart Openstack Services screen 指令选项总 ...

  4. jquery中typeof的用法

    typeof 可以用来检测给定变量的数据类型,可能的返回值: 'undefined' 'boolean' 'string' 'number' 'object' 'function' var hahah ...

  5. WebStorm+Node.js开发环境的配置

    1 下载地址:  webstorm:http://www.jetbrains.com/webstorm node.js:https://nodejs.org/download/ 2 安装node.js ...

  6. 【集合框架】JDK1.8源码分析之HashMap

    一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化,其中最重要的一个优化就是桶中的元素不再唯一按照链表组合,也 ...

  7. <面试题>学习面试

    1.代码中要修改不可变数据会出现什么问题? 抛出什么异常? 代码不会正常运行,抛出 TypeError 异常. # 比如修改元祖.会报错 TypeError: 'tuple' object does ...

  8. 15-Ubuntu-文件和目录命令-查看目录内容-ls-2

    4. ls和通配符的使用 通配符适用的地方:shell命令行或者shell脚本中. 正则表达式适用的地方:字符串处理时,一般有一般正则和Perl正则. 正则表达式与通配符有相同的符号但是意义不同!! ...

  9. HduOJ 2162 - Primes

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2161 题意:判断n是不是素数,输入到0停止.题目规定1 2 都不是素数. 题解:筛素数.老题目.不过这 ...

  10. SolrCloud6.1.0之SQL查询测试

    Solr发展飞快,现在最新的版本已经6.1.0了,下面来回顾下Solr6.x之后的一些新的特点: (1)并行SQL特性支持,编译成Streaming 表达式,可以在solrcloud集群中,并行执行  ...