数据结构和算法(Java版)快速学习(数组Array)
Java数组
在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型。
用类封装数组实现数据结构
数据结构必须具有以下基本功能:
①、如何插入一条新的数据项
②、如何寻找某一特定的数据项
③、如何删除某一特定的数据项
④、如何迭代的访问各个数据项,以便进行显示或其他操作
而我们知道了数组的简单用法,现在用类的思想封装一个数组,实现上面的四个基本功能:
- class EasyAarray{ //数据结构:简易数组
- private int[] ins; //一维整型数组
- private int footer; //数组下标
- private int maxLength; //数组最大长度
- public EasyAarray(){
- footer=0;
- maxLength=100;
- ins=new int[maxLength]; //无参构造默认初始化100长度的数组
- }
- public EasyAarray(int length){ //初始化长度为n的数组
- footer=0;
- maxLength=length;
- ins=new int[maxLength];
- }
- //取得数组的有效长度
- //遍历数组的元素
- //添加
- //判断元素是否存在
- //根据下标查找元素
- //修改元素
- //删除元素
- }
具体代码编写:
- class EasyAarray{ //数据结构:简易无序数组
- private int[] ins; //一维整型数组
- private int footer; //数组下标
- private int maxLength; //数组最大长度
- public EasyAarray(){
- footer=0;
- maxLength=100;
- ins=new int[maxLength]; //无参构造默认初始化100长度的数组
- }
- public EasyAarray(int length){ //初始化长度为n的数组
- footer=0;
- maxLength=length;
- ins=new int[maxLength];
- }
- //取得数组的有效长度
- public int size(){
- return footer;
- }
- //遍历数组的元素
- public void printAarray(){
- for(int i=0;i<footer;i++){
- System.out.print(ins[i]+" ");
- }
- System.out.println();
- }
- //添加
- public boolean add(int n){
- if(footer>=maxLength){ //若下标超出最大长度,则添加失败(不考虑扩容)
- return false;
- }
- ins[footer++]=n;
- return true;
- }
- //判断元素是否存在
- public boolean exist(int n){
- for(int i=0;i<=footer;i++){
- if(n==ins[i]){
- return false;
- }
- }
- return true;
- }
- //根据下标(索引)查找元素
- public int get(int index){
- return ins[index];
- }
- //修改元素(若有重复元素,只修改第一个)
- public boolean modify(int oldValue,int newValue){
- for(int i=0;i<=footer;i++){
- if(oldValue==ins[i]){
- ins[i]=newValue;
- return false;
- }
- }
- return true;
- }
- //删除元素
- public boolean del(int index){
- if(!exist(index)){ //若元素不存在,返回false
- return false;
- }
- for(int i=index;i<=footer;i++){ //元素依次前移
- ins[i]=ins[i+1];
- }
- footer--; //下标减1
- return true;
- }
- }
- public class App {
- public static void main(String[] args) {
- EasyAarray ea=new EasyAarray(10);
- System.out.println(ea.size());
- ea.add(4);
- ea.add(7);
- ea.add(3);
- ea.add(1);
- ea.add(9);
- ea.del(2); //删除第3个元素(索引是2)
- ea.printAarray();
- }
- }
数组的局限性
通过上面的代码,我们发现数组是能够完成一个数据结构具有的所有功能,而且实现起来也不难,但是实际应用中不用它来进行所有的数据存储。
数组(不考虑排序)的局限性分析:
①、插入快,对于无序数组,上面我们实现的数组就是无序的,即元素没有按照从大到小或者某个特定的顺序排列,只是按照插入的顺序排列。无序数组增加一个元素很简单,只需要在数组末尾添加元素即可,但是有序数组却不一定了,它需要在指定的位置插入。
②、查找慢,当然如果根据下标来查找是很快的。但是通常我们都是根据元素值来查找,给定一个元素值,对于无序数组,我们需要从数组第一个元素开始遍历,知道找到那个元素。有序数组通过特定的算法查找的速度会比无需数组快,后面我们会讲各种排序算法。
③、删除慢,根据元素值删除,我们要先找到该元素所处的位置,然后将元素后面的值整体向前面移动一个位置。也需要比较多的时间。
④、数组一旦创建后,大小就固定了,不能动态扩展数组的元素个数。如果初始化你给一个很大的数组大小,那会白白浪费内存空间,如果给小了,后面数据个数增加了又添加不进去了。
很显然,数组虽然插入快,但是查找和删除都比较慢,所以我们不会用数组来存储所有的数据,那有没有什么数据结构插入、查找、删除都很快,而且还能动态扩展存储个数大小呢,答案是有的,比如ArrayList动态数组就可以动态的扩展存储元素的个数,其他的暂时不需要了解。
数据结构和算法(Java版)快速学习(数组Array)的更多相关文章
- 【数据结构与算法Python版学习笔记】引言
学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...
- 数据结构与算法 java描述 第一章 算法及其复杂度
目录 数据结构与算法 java描述 笔记 第一章 算法及其复杂度 算法的定义 算法性能的分析与评价 问题规模.运行时间及时间复杂度 渐进复杂度 大 O 记号 大Ω记号 Θ记号 空间复杂度 算法复杂度及 ...
- 数据结构与算法Java描述 队列
package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...
- 北京大学公开课《数据结构与算法Python版》
之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ...
- 【学习总结】java数据结构和算法-第三章-稀疏数组和队列
相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...
- Java数据结构和算法(二):数组
上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要 ...
- 数据结构(java版)学习笔记(一)——线性表
一.线性表的定义 线性表是n(n>=0)个具有相同特性的数据元素的有限序列. 线性表是最简单.最常用的一种数据结构 线性表属于线性结构的一种 如果一个数据元素序列满足: (1)除第一个和最后一个 ...
- 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题
常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...
- 《数据结构与算法之美》 <03>数组:为什么很多编程语言中数组都从0开始编号?
提到数组,我想你肯定不陌生,甚至还会自信地说,它很简单啊. 是的,在每一种编程语言中,基本都会有数组这种数据类型.不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构.尽管数组看起来非常 ...
- 为什么我要放弃javaScript数据结构与算法(第二章)—— 数组
第二章 数组 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构.JavaScript里也有数组类型,虽然它的第一个版本并没有支持数组.本章将深入学习数组数据结构和它的能力. 为什么 ...
随机推荐
- java CAS和AQS
全面了解Java中的CAS机制 https://www.jb51.net/article/125232.htm https://www.cnblogs.com/javalyy/p/8882172.ht ...
- qt tableview列头背景颜色设置
设置表列头背景颜色 QHeaderView::section { background: rgb(255, 255, 127); }
- node.js中使用imagemagick进行图片裁剪压缩
node.js中使用imagemagick进行图片裁剪压缩 安装imagemagick sudo apt-get install imagemagick or wget http://www.imag ...
- thinkphp5服务器部署遇到的问题
candir() has been disabled for security reasons 解决办法: 进入到php的配置目录,编辑php.ini cd /usr/local/php/etcvi ...
- python socket使用
自学python,先在菜鸟教程网自学,然后买了本书看.又从同事那里淘到了某个培训学校python教学视频,查缺补漏.视频是用python3.0讲的,讲解的很不错,中间有让写作业,这个我很喜欢.这几天看 ...
- vim替换
:%s/mxmlElementGetAttr/xml_get_attr/g :{作用范围}s/{目标}/{替换}/{替换标志} 例如:%s/foo/bar/g会在全局范围(%)查找foo并替换为bar ...
- STM32Cube IDE配置串口发送与接收
此项目源码下载地址:https://github.com/lizhiqiang0204/STM32CubeIDE_Uart 串口与中断配置如下 在生成的main函数中,添加开启串口接收中断 HAL_I ...
- Java AtomicInteger类的使用方法详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下: public class Samp ...
- Docker(六):Dockerfile命令详解
Dockerfile 指令详解 1 FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像.FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docke ...
- 【leetcode】Reach a Number
题目: You are standing at position 0 on an infinite number line. There is a goal at position target. O ...