Java数组

在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型。

用类封装数组实现数据结构

数据结构必须具有以下基本功能:

  ①、如何插入一条新的数据项

  ②、如何寻找某一特定的数据项

  ③、如何删除某一特定的数据项

  ④、如何迭代的访问各个数据项,以便进行显示或其他操作

  而我们知道了数组的简单用法,现在用类的思想封装一个数组,实现上面的四个基本功能:

  1. class EasyAarray{ //数据结构:简易数组
  2. private int[] ins; //一维整型数组
  3. private int footer; //数组下标
  4. private int maxLength; //数组最大长度
  5. public EasyAarray(){
  6. footer=0;
  7. maxLength=100;
  8. ins=new int[maxLength]; //无参构造默认初始化100长度的数组
  9. }
  10. public EasyAarray(int length){ //初始化长度为n的数组
  11. footer=0;
  12. maxLength=length;
  13. ins=new int[maxLength];
  14. }
  15. //取得数组的有效长度
  16. //遍历数组的元素
  17. //添加
  18. //判断元素是否存在
  19. //根据下标查找元素
  20. //修改元素
  21. //删除元素
  22. }

  

具体代码编写:

  1. class EasyAarray{ //数据结构:简易无序数组
  2. private int[] ins; //一维整型数组
  3. private int footer; //数组下标
  4. private int maxLength; //数组最大长度
  5. public EasyAarray(){
  6. footer=0;
  7. maxLength=100;
  8. ins=new int[maxLength]; //无参构造默认初始化100长度的数组
  9. }
  10. public EasyAarray(int length){ //初始化长度为n的数组
  11. footer=0;
  12. maxLength=length;
  13. ins=new int[maxLength];
  14. }
  15. //取得数组的有效长度
  16. public int size(){
  17. return footer;
  18. }
  19. //遍历数组的元素
  20. public void printAarray(){
  21. for(int i=0;i<footer;i++){
  22. System.out.print(ins[i]+" ");
  23. }
  24. System.out.println();
  25. }
  26. //添加
  27. public boolean add(int n){
  28. if(footer>=maxLength){ //若下标超出最大长度,则添加失败(不考虑扩容)
  29. return false;
  30. }
  31. ins[footer++]=n;
  32. return true;
  33. }
  34. //判断元素是否存在
  35. public boolean exist(int n){
  36. for(int i=0;i<=footer;i++){
  37. if(n==ins[i]){
  38. return false;
  39. }
  40. }
  41. return true;
  42. }
  43. //根据下标(索引)查找元素
  44. public int get(int index){
  45. return ins[index];
  46. }
  47. //修改元素(若有重复元素,只修改第一个)
  48. public boolean modify(int oldValue,int newValue){
  49. for(int i=0;i<=footer;i++){
  50. if(oldValue==ins[i]){
  51. ins[i]=newValue;
  52. return false;
  53. }
  54. }
  55. return true;
  56. }
  57. //删除元素
  58. public boolean del(int index){
  59. if(!exist(index)){ //若元素不存在,返回false
  60. return false;
  61. }
  62. for(int i=index;i<=footer;i++){ //元素依次前移
  63. ins[i]=ins[i+1];
  64. }
  65. footer--; //下标减1
  66. return true;
  67. }
  68. }
  69. public class App {
  70. public static void main(String[] args) {
  71. EasyAarray ea=new EasyAarray(10);
  72. System.out.println(ea.size());
  73. ea.add(4);
  74. ea.add(7);
  75. ea.add(3);
  76. ea.add(1);
  77. ea.add(9);
  78. ea.del(2); //删除第3个元素(索引是2)
  79. ea.printAarray();
  80. }
  81. }

  

数组的局限性

  通过上面的代码,我们发现数组是能够完成一个数据结构具有的所有功能,而且实现起来也不难,但是实际应用中不用它来进行所有的数据存储。

  数组(不考虑排序)的局限性分析:

  ①、插入快,对于无序数组,上面我们实现的数组就是无序的,即元素没有按照从大到小或者某个特定的顺序排列,只是按照插入的顺序排列。无序数组增加一个元素很简单,只需要在数组末尾添加元素即可,但是有序数组却不一定了,它需要在指定的位置插入。

  ②、查找慢,当然如果根据下标来查找是很快的。但是通常我们都是根据元素值来查找,给定一个元素值,对于无序数组,我们需要从数组第一个元素开始遍历,知道找到那个元素。有序数组通过特定的算法查找的速度会比无需数组快,后面我们会讲各种排序算法。

  ③、删除慢,根据元素值删除,我们要先找到该元素所处的位置,然后将元素后面的值整体向前面移动一个位置。也需要比较多的时间。

  ④、数组一旦创建后,大小就固定了,不能动态扩展数组的元素个数。如果初始化你给一个很大的数组大小,那会白白浪费内存空间,如果给小了,后面数据个数增加了又添加不进去了。

  很显然,数组虽然插入快,但是查找和删除都比较慢,所以我们不会用数组来存储所有的数据,那有没有什么数据结构插入、查找、删除都很快,而且还能动态扩展存储个数大小呢,答案是有的,比如ArrayList动态数组就可以动态的扩展存储元素的个数,其他的暂时不需要了解。

数据结构和算法(Java版)快速学习(数组Array)的更多相关文章

  1. 【数据结构与算法Python版学习笔记】引言

    学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...

  2. 数据结构与算法 java描述 第一章 算法及其复杂度

    目录 数据结构与算法 java描述 笔记 第一章 算法及其复杂度 算法的定义 算法性能的分析与评价 问题规模.运行时间及时间复杂度 渐进复杂度 大 O 记号 大Ω记号 Θ记号 空间复杂度 算法复杂度及 ...

  3. 数据结构与算法Java描述 队列

    package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...

  4. 北京大学公开课《数据结构与算法Python版》

    之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ...

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

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

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

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

  7. 数据结构(java版)学习笔记(一)——线性表

    一.线性表的定义 线性表是n(n>=0)个具有相同特性的数据元素的有限序列. 线性表是最简单.最常用的一种数据结构 线性表属于线性结构的一种 如果一个数据元素序列满足: (1)除第一个和最后一个 ...

  8. 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

    常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...

  9. 《数据结构与算法之美》 <03>数组:为什么很多编程语言中数组都从0开始编号?

    提到数组,我想你肯定不陌生,甚至还会自信地说,它很简单啊. 是的,在每一种编程语言中,基本都会有数组这种数据类型.不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构.尽管数组看起来非常 ...

  10. 为什么我要放弃javaScript数据结构与算法(第二章)—— 数组

    第二章 数组 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构.JavaScript里也有数组类型,虽然它的第一个版本并没有支持数组.本章将深入学习数组数据结构和它的能力. 为什么 ...

随机推荐

  1. java CAS和AQS

    全面了解Java中的CAS机制 https://www.jb51.net/article/125232.htm https://www.cnblogs.com/javalyy/p/8882172.ht ...

  2. qt tableview列头背景颜色设置

    设置表列头背景颜色 QHeaderView::section { background: rgb(255, 255, 127); }

  3. node.js中使用imagemagick进行图片裁剪压缩

    node.js中使用imagemagick进行图片裁剪压缩 安装imagemagick sudo apt-get install imagemagick or wget http://www.imag ...

  4. thinkphp5服务器部署遇到的问题

    candir() has been disabled for security reasons 解决办法: 进入到php的配置目录,编辑php.ini cd /usr/local/php/etcvi ...

  5. python socket使用

    自学python,先在菜鸟教程网自学,然后买了本书看.又从同事那里淘到了某个培训学校python教学视频,查缺补漏.视频是用python3.0讲的,讲解的很不错,中间有让写作业,这个我很喜欢.这几天看 ...

  6. vim替换

    :%s/mxmlElementGetAttr/xml_get_attr/g :{作用范围}s/{目标}/{替换}/{替换标志} 例如:%s/foo/bar/g会在全局范围(%)查找foo并替换为bar ...

  7. STM32Cube IDE配置串口发送与接收

    此项目源码下载地址:https://github.com/lizhiqiang0204/STM32CubeIDE_Uart 串口与中断配置如下 在生成的main函数中,添加开启串口接收中断 HAL_I ...

  8. Java AtomicInteger类的使用方法详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下: public class Samp ...

  9. Docker(六):Dockerfile命令详解

    Dockerfile 指令详解 1 FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像.FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docke ...

  10. 【leetcode】Reach a Number

    题目: You are standing at position 0 on an infinite number line. There is a goal at position target. O ...