数据结构和算法(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里也有数组类型,虽然它的第一个版本并没有支持数组.本章将深入学习数组数据结构和它的能力. 为什么 ...
随机推荐
- vim学习(三)之命令
参考 Linux vi/vim vim常用命令总结
- mysql数据库之存储过程
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该 ...
- java静态代码块、静态方法、静态变量、构造代码块、普通代码块
一.静态代码块 1.在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块: public class CodeBlock{ static{ System.out.prin ...
- scala 从头越
一个综合小例子, 要严格区分 函数与方法 , 与 java 不一样 /** * Scala 的值类型有 7 种 * Byte * Char * Short * Int * Long * Float * ...
- thinkphp+webuploader实现大文件分片上传
大文件分片上传,简单来说就是把大文件切分为小文件,然后再一个一个的上传,到最后由这些小文件再合并成原来的文件 webuploader下载地址及其文档:http://fex.baidu.com/webu ...
- vim 添加显示和行号
方法一: 1.显示当前行行号,在VI的命令模式下输入 :nu 2.显示所有行号,在VI的命令模式下输入 :set nu :set nonu 关闭 方法二: 使用vi编辑~/.vimrc文件,在该文件中 ...
- Kubernetes集群详细介绍及部署
kubernetes的介绍: kubernetes是谷歌在2014年6月的一个开源集群项目,使用go语言开发,因为除了ks后只有8个字母又被称为k8s. k8s的主要作用: 自动化部署 扩展容器的管理 ...
- 01Java经典问题
1.利用Dos输出hello world 建立一个Test.java文件,放在e盘: public class Test{ public static void main(String[] args) ...
- etl-p
java excel 导入数据库 上传文件包 解压导入excel包 导入mysql
- 【gin-vue-admin】 使用go和vue 快速搭建一个项目模板
gin-vue-admin gin+vue开源快速项目模板 项目地址:https://github.com/piexlmax/gin-vue-admin 增加了 micro-service-test分 ...