java数据结构和算法中数组的简单入门

 更新时间:2019年06月07日 16:04:17   投稿:laozhang  
在本文里小编给大家整理了关于java数据结构和算法中数组的简单入门知识点整理,需要的朋友们学习下。

一直都对这一块没有什么想法,加上不怎么理解,只是懂个大概;最近突然感觉对数据结构和算法这块有点儿兴趣,决定还是尽量详细的看看这些结构和算法;

话说什么事数据结构和算法呢?现在我也说不上来,等我学的差不多了再来总结吧!

我随意借了一张图,所谓的数据结构就是下面这些,我们一个一个的慢慢看(玛德,好多。。。)

1.数组的基本用法

对于数组应该很熟悉了,最开始学完java八种基本类型之后下一个就是学的数组,数组最大的特点就是除了Object数组之外,其他的数组只能存放同一种数据类型,而且我们一开始指定数组就要指定确定的长度,一旦插入的数据超过这个长度,就会报错,其实就是因为数组的缺点太大,于是就根据数组的基础设计出来了集合,集合后面说。。

两种用法,以Object数组为例,这个数组可以随意放什么东西,然后用Arrays.toString(xxx)可以打印数组中的所有元素;

  

任何数据类型都有与之对应的数组,比如int[],String[],boolean[]等等

2.简单实现对数组的增删改查

·用数组的比较麻烦,还要一个一个慢慢赋值,对我们操作数据也不是很方便,那我们就随意实现一下我们自己的数组最简单的增删改查吧!

package com.wyq.thread;

public class MyArray {
  private int[] arr;
  //数组中当前存有数据的个数,也叫做数组的有效长度
  private int eles;
  
  //数组中可容纳最大的数量
  private int length;
  
  //注意这两个构造器,在无参构造中调用有参构造并设置默认的数组长度
  public MyArray() {
    this(10);
  }
  public MyArray(int length){
    eles = 0;
    this.length = length;
    arr = new int[length];
  }
  //获取当前数组存的实际数据的数量
  public int size(){
    return eles;
  }
  //展示当前数组中的数据
  public void show(){
    System.out.print("数组中所有的数分别为:");
    for (int i = 0; i < arr.length; i++) {
      System.out.print(arr[i]+" ");
    }
    System.out.println();
  }
  
  //向数组中添加数据
  public boolean add(int num){
    //假如当前数组已经满了还往里面添加数据,那就抛出异常并返回false,后续操作还是会继续
    //这里就没怎么考虑给这个数组扩容
    if (length==eles) {
      try {
        throw new Exception("不好意思,数组已经满了,你还是别存了!");
      } catch (Exception e) {
        e.printStackTrace();
      }
      return false;
    }else{
      arr[eles] = num;
      eles++;
      return true;
    }
  }
  //在数组中查有没有一个xxx数据,有就返回其索引值,没有的话就返回null,其实也可以捕捉异常,可以自己试试
  public Integer find(int value){
    if (arr!=null) {
      for (int i = 0; i < arr.length; i++) {
        if (arr[i]==value) {
          return i;
        }
      }
    }
    return null;
  }
  //删除数组中的xx数据,这里会进行很多的判断,可以说这个方法是数组中最麻烦的方法了
  //1.先调用查询方法看数组中有没有我们要删除的数据,没有直接返回-1,有的话就进入第二步
  //2.如果这个要删除的数据在数组最后,那就直接将数组有效长度减一即可,如果不在最后,进入第三步
  //3.一个数组要删除中间的个位置,不可能直接将这个数据复制为0或者null,我们只需要把这个位置的后面所有数据都向前
  //  移动一个位置即可,这时数组的最后一个位置就空出来了,我们再把数组的有效长度减一就行了
  public int delete(int value){
    Integer find = find(value);
    if (find!=null) {
      if (find==eles-1) {
        eles--;
      }else{
        for (int i = find; i < arr.length-1; i++) {
          if (arr[i]==value) {
            arr[i]=arr[i+1];
          }
        }
        eles--;
      }
      
    }
    return -1;  
    
  }
  //更新数据,先调用查询方法找到这个数据所在位置,然后直接赋值即可
  public boolean update(int index,int value){
    Integer find = find(index);
    if (find!=null) {
      arr[index]=value;
      return true;
    }
    return false;
  }


  public static void main(String[] args) {
    //由于没有指定数组长度,就会用默认的10
    MyArray array = new MyArray();
    
    for (int i = 0; i < 10; i++) {
      array.add(i);
    }
    //注意,此时由于数组满了我们还添加数据,就会报异常
    array.add(222);
    array.show();
    array.delete(5);
    System.out.println("删除数据后数组的实际大小:"+array.size());
    array.add(100);
    array.update(0, 10);
    array.find(9);
    array.show();
    
  }
}

不知道大家有没有发现,我们实现的这个最简单的数组有没有跟集合有点类似啊,就是那个ArrayList,去看看源码你会发现我们这个就是最丑陋版的ArrayList,哈哈哈!只是实现了最简单的功能!

相关文章

  • SpringMVC MVC架构与Servlet使用详解

    SpringMVC MVC架构与Servlet使用详解

    MVC设计模式一般指 MVC 框架,M(Model)指数据模型层,V(View)指视图层,C(Controller)指控制层。使用 MVC 的目的是将 M 和 V 的实现代码分离,使同一个程序可以有不同的表现形式。其中,View 的定义比较清晰,就是用户界面
    2022-10-10
  • Spring Boot 控制层之参数传递方法详解

    Spring Boot 控制层之参数传递方法详解

    这篇文章主要介绍了Spring Boot 控制层之参数传递方法详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 用Java实现希尔排序的示例

    用Java实现希尔排序的示例

    问题:现有一段程序S,可以对任意n个数进行排序。如果现在需要对n^2个数进行排序,最少需要调用S多少次?只允许调用S,不可以做别的操作。我们用希尔排序来做解决这个
    2013-11-11
  • Java中Collections.sort()排序方法举例详解

    Java中Collections.sort()排序方法举例详解

    很多时候都需要对一些数据进行排序的操作,这篇文章主要给大家介绍了关于Java中Collections.sort()方法举例详解的相关资料,使用Collections.sort()可以使用其sort()方法来对List、Set等集合进行排序,需要的朋友可以参考下
    2024-02-02
  • Spring RedirectAttributes参数跳转代码实例

    Spring RedirectAttributes参数跳转代码实例

    这篇文章主要介绍了Spring RedirectAttributes参数跳转代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • springboot更新配置Swagger3的一些小技巧

    springboot更新配置Swagger3的一些小技巧

    今天给大家分享springboot更新配置Swagger3的方法,大家需要注意Swagger3版本需要引入依赖,具体示例代码参考下本文
    2021-07-07
  • SpringBoot错误处理流程深入详解

    SpringBoot错误处理流程深入详解

    在项目开发中出现异常时很平常不过的事情,我们处理异常也有很多种方式。本文将详细为大家讲解SpringBoot实现异常处理几种方法,感兴趣的可以学习一下
    2022-10-10
  • Spring用代码来读取properties文件实例解析

    Spring用代码来读取properties文件实例解析

    这篇文章主要介绍了Spring用代码来读取properties文件实例解析,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Spring Data JPA 映射VO/DTO对象方式

    Spring Data JPA 映射VO/DTO对象方式

    这篇文章主要介绍了Spring Data JPA 映射VO/DTO对象方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • spring-boot-maven-plugin:unknown的完美解决方法

    spring-boot-maven-plugin:unknown的完美解决方法

    这篇文章主要介绍了spring-boot-maven-plugin:unknown的完美解决方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11

最新评论