数据结构---Java---数组

Posted anpeiyong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构---Java---数组相关的知识,希望对你有一定的参考价值。

 

 

**************************************************************前言**********************************************************

1、在Java中,数组是一种引用数据类型;

                       数组的  引用变量   与   数组元素分别存储于    栈内存、堆内存中;

                      只能通过  数组的 引用变量  来访问   数组元素,eg:p[index];

      

2、Java中,数组在内存中的存储形式

      

      引用变量arr    

      执行new int[3],在堆内存中开辟一个空间,生成一个内存地址值(eg:0x0045),然后将该地址值  赋值给  引用变量arr(arr=0x0045),这样引用变量就指向了元素存储的内存位置;

 

 

1、概述

    在内存中存储方式:连续的、固定大小;

【自定义数组】

 

  删除:指定index位置之后的数据整体左移即可

             

package com.exiuge.mytest.array;

public class MyArray {

    private long[] arr;
    /**
     * 实际数组元素大小
     */
    private int elementsSize;
    /**
     * 初始容量50
     */
    private static final int initSize=50;

    public MyArray(){
        arr=new long[initSize];
    }

    /**
     * insert
     * @param value
     */
    public void insert(Long value){
        if (elementsSize>=initSize){
            throw new ArrayIndexOutOfBoundsException();
        }
        arr[elementsSize]=value;
        elementsSize++;
    }

    /**
     * 展示全部
     */
    public void display(){
        System.out.println("[");
        for (int i=0;i<elementsSize;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println("]");
    }

    /**
     * 根据value找下标索引
     * @param value
     * @return
     */
    public int findByValue(Long value){
        int i;
        for (i=0;i<elementsSize;i++){
            if (arr[i]==value){
                break;
            }
        }
        if (i==elementsSize){
            return -1;
        }else {
            return i;
        }
    }

    /**
     * 根据下标索引找value
     * @param index
     * @return
     */
    public long findByIndex(int index){
        if (index>=elementsSize || index<0){
            throw new ArrayIndexOutOfBoundsException();
        }else {
            return arr[index];
        }
    }

    /**
     * 根据下标索引删除value
     * @param index
     */
    public void deleteByIndex(int index){
        if (index>=elementsSize || index<0){
            throw new ArrayIndexOutOfBoundsException();
        }else {
            for (int i=index;i<elementsSize;i++){
                arr[index]=arr[index+1];
            }
            elementsSize--;
        }
    }

    /**
     * 根据下标索引进行修改value
     * @param index
     * @param newValue
     */
    public void updateByIndex(int index,long newValue){
        if (index>=elementsSize || index<0){
            throw new ArrayIndexOutOfBoundsException();
        }else {
            arr[index]=newValue;
        }
    }

}

2、效率分析

    查找:

      无序、有序数组,线性查找:o(n);

              二分递归查找:o(log n);

    新增:

      无序数组插入,o(1);

      有序数组插入,先查找o(log n),不存在再插入需要移动,o(n),需要o(n);

    删除:

      无序、有序,先查找o(log n),存在再删除需要移动,o(n),需要o(n);

     

以上是关于数据结构---Java---数组的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段10—— 数组的响应式方法

Java经典安全数组实现的代码

java.io.ByteArrayInputStream

如何在片段中使用 GetJsonFromUrlTask​​.java

web代码片段

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”