Java数据结构之数组(动力节点之Java学院整理)

作者:mrr 时间:2023-09-23 21:20:12 

数组的用处是什么呢?——当你需要将30个数进行大小排列的时候,用数组这样的数据结构存储是个很好的选择,当你是一个班的班主任的时候,每次要记录那些学生的缺勤次数的时候,数组也是很有用。数组可以进行插入,删除,查找等。

1)创建和内存分配

Java中有两种数据类型,基本类型和对象类型,也有人称为引用类型,Java中把数组当成对象,创建数组时使用new操作符。


int array[] = new int[10];

既然是对象,那么array便是数组的一个引用,根据Java编程思想(一) —— 一切都是对象 的内存分配,array会在栈中开辟空间,并且空间存储着保存数组存储的地址,真正保存对象的地方是对,new操作在堆中开辟了所需的空间,然后array指向头地址。

初始化:


public class UseArray {
  public static void main(String[] args) {
    int array[] = new int[10];
    System.out.println(array[2]);
    UseArray a[] = new UseArray[12];
    System.out.println(a[1]);
    int array2[] ={1,2,3,4,5,5,6};
  }
}

new后的数组里面的值被默认初始化为0,而对象的初始化是空的,null,当然还可以通过{}的方式初始化。

2)数组封装后的使用


public class UseArray {
  private int[] array;
  private int number = 0;
  public UseArray(int max){
    array = new int[max];
  }
  public void insert(int value){
    array[number] = value;
    number++;
  }
  public int find(int value){
    for (int i= 0; i < number; i++) {
      if(array[i]==value)
        return i;
    }
    return number;
  }
  public boolean delete(int value){
    int index = find(value);
    if(index != number){
      for (int i = index; i < number-1; i++) {
        array[i] = array[i+1];
      }
      number--;
      return true;
    }
    return false;
  }
  public void display(){
    for (int i = 0; i < number; i++) {
      System.out.printf(array[i]+" ");
    }
  }
  public static void main(String[] args) {
    UseArray ua = new UseArray(5);
    ua.insert(1);
    ua.insert(2);
    ua.insert(6);
    ua.insert(7);
    ua.insert(3);      
    ua.display();
    if(ua.find(5) != ua.number){
      System.out.println("find,the number index is "+ua.find(5));
    }else{
      System.out.println("not found!");
    }
    if(ua.delete(5)!=true){
      System.out.println("can not delete!");
    }
   ua.display();
  }
}

将整个数组封装,用number代替数组的个数,插入数据的时候也不必理会往哪个下标插,当然,也可以自定义一个具体下标的方法。

方法比较简单就不介绍了,但是存在的一个缺点在delete那里,其实只是从删除元素开始的左移而已,所以,虽然number减少了,但是最后一个元素并没有删除掉,只是display输出展示的时候隐藏了而已,但是,下次插入元素的时候新元素便会取代掉最后一个元素的位置。

3)查找优化——二分查找


public int find(int value){
    int start = 0;
    int end = number-1;
    while(end>=start){
      int index =(end + start)/2;  
      if(array[index]==value){
        return index;
      }else if(array[index] >value){
        end = index-1;
      }else {  
        start = index+1;
      }
    }
    return number;
  }

二分查找前提是数组已经有序。刚开始index写成end和start相减,造成死循环。其实要的是相加。1,2,3,6,7。index=2,value=7,3小于7,start=3,那么index要的是3和4间的中间数,所以是相加之后除以2,6小于7,start=4,find到7。

4)大O表示法

设N为数据总数,加入插入一个数据时间为K。那么线性查找总时间T=K*N/2,因为查找的话大概为比较数目的一半。

二分查找的话T=k*log2(N)。大O表示法,O可以看成是order of,大约是的意思,k/2也是常数,所以可以看成是O(N)。

数组的缺点呢,就是大小固定,查找慢,如果你要经常查找百万级别的数据,还会用数组吗?不会的,所以数据结构的选用要结合具体的实际情况,达到最大的效率值。

以上所述是小编给大家介绍的Java数据结构之数组(动力节点之Java学院整理)网站的支持!

标签:java,数据结构,数组
0
投稿

猜你喜欢

  • Java实现排队论的原理

    2023-11-23 02:19:24
  • Android自定义viewGroup实现点击动画效果

    2022-09-01 00:27:07
  • Java实现的最大匹配分词算法详解

    2021-12-30 00:50:04
  • Windows同时安装两个版本JDK并实现动态切换JAVA8或JAVA11的方法

    2022-05-20 05:38:41
  • Spring MVC结合Spring Data JPA实现按条件查询和分页

    2023-03-04 07:24:36
  • C#获取图片文件扩展名的方法

    2022-03-06 04:27:43
  • java整合SSM框架的图文教程

    2023-03-11 01:06:30
  • java实现MapReduce对文件进行切分的示例代码

    2023-10-07 21:46:59
  • Spring Boot Admin 进行项目监控管理的方法

    2021-09-01 23:39:19
  • JVM致命错误日志详解(最新推荐)

    2023-08-22 07:42:30
  • C#中using指令的几种用法

    2022-01-25 01:35:25
  • C#实现汉字转换为拼音缩写的代码

    2021-11-21 04:04:51
  • Android中获得正在运行的程序和系统服务的方法

    2023-01-19 21:05:42
  • 美化java代码,从合理注释开始

    2022-01-18 16:32:47
  • 解决Android Studio xml 格式化不自动换行的问题

    2021-09-10 06:15:42
  • C#异步编程Task的创建方式

    2023-07-23 06:22:43
  • fastjson全局日期序列化设置导致JSONField失效问题解决方案

    2021-12-13 10:58:24
  • C#中的数组用法详解

    2021-08-19 14:50:17
  • java中JVM中如何存取数据和相关信息详解

    2023-08-10 03:49:46
  • Mybatis返回插入的主键问题解决方案

    2023-05-06 02:58:03
  • asp之家 软件编程 m.aspxhome.com