自定义数组java

工作算的上是一年了,但是这一年大多数时间都在玩游戏,混日子。大学虽然学过数据结构,但是听的迷迷糊糊。完全没有听懂。以下记录一下学习数据结构的过程,方便自己和他人复习。

   数据结构在我理解中就是数据和数据中间的存储关系。数组是一种最常见的数据结构。优点是查询速度很快,但是删除效率很低,要移动各个数组。

   数组插入

   1、创建一个新的数组,大小比原来的数组长度大一。

   2、把原来的数组的值赋值到新数组

   3、新数组插入最新元素

   4、新数组赋值给原数组

public class MyArray {
      int[] elements;

      public void add(int data) {
        // 创建一个新数组
        int[] newArr = new int[elements.length + 1];
        // 把原数组的值赋值到新数组
        for (int i = 0; i < elements.length; i++) {
            newArr[i] = elements[i];
        }
        // 新数组赋值
        newArr[elements.length] = data;
        // 把新数组赋值给原数组
        elements = newArr;
    }
}    

运用System.arraycopy插入

public class MyArray {

    int[] elements;
    
    public void add1(int data) {
        int[] newArr = new int[elements.length + 1];
        System.arraycopy(elements, 0, newArr, 0, elements.length);
        newArr[elements.length] = data;
        elements = newArr;
    }
}    

数组删除(根据一个下标进行删除) 

1、判断改下标是否存在

2、创建一个新数组长度为原数组长度小一。

3、为新数组赋值

    分为下标之前和下标之后。

   下标之前,直接赋值。

    下标之后,新数组的i对应原数组i+1

图画的很丑将就看下。

4、新数组赋值给原数组

public class MyArray {

    int[] elements;

      public int delete(int index) {
        if (index >= elements.length || index < 0) {
            return -1;
        }
        // 创建一个新数组
        int ret = elements[index];
        int[] newArr = new int[elements.length - 1];
        for (int i = 0; i < newArr.length; i++) {
            if (i < index) {
                // 如果小于 新数组直接赋值
                newArr[i] = elements[i];
            } else {
                // 如果大于
                newArr[i] = elements[i + 1];
            }
        }

        elements = newArr;
        return ret;
    }


    // 运用system.arraycopy删除 
    public int delete1(int index) {
        if (index >= elements.length || index < 0) {
            return -1;
        }
        System.arraycopy(elements, index + 1, elements, index, 
                elements.length - index - 1);
        int ret = elements[index];
                //需要删除的值赋值为0  如果是对象 赋值为空。让GC清除
        elements[elements.length - 1] = 0;
        return ret;
    }

}

 5、自定义数组整合所有代码

package com.demo;

import java.util.Arrays;


//自定义数组
public class MyArray {

    int[] elements;

    public MyArray() {
        elements = new int[0];
    }

    public void add(int data) {
        // 创建一个新数组
        int[] newArr = new int[elements.length + 1];
        // 把原数组的值赋值到新数组
        for (int i = 0; i < elements.length; i++) {
            newArr[i] = elements[i];
        }
        // 新数组赋值
        newArr[elements.length] = data;
        // 把新数组赋值给原数组
        elements = newArr;
    }

    public void add1(int data) {
        int[] newArr = new int[elements.length + 1];
        System.arraycopy(elements, 0, newArr, 0, elements.length);
        newArr[elements.length] = data;
        elements = newArr;
    }


    public int delete(int index) {
        if (index >= elements.length || index < 0) {
            return -1;
        }
        // 创建一个新数组
        int ret = elements[index];
        int[] newArr = new int[elements.length - 1];
        for (int i = 0; i < newArr.length; i++) {
            if (i < index) {
                // 如果小于 新数组直接赋值
                newArr[i] = elements[i];
            } else {
                // 如果大于
                newArr[i] = elements[i + 1];
            }
        }

        elements = newArr;
        return ret;
    }

    public int size() {
        return elements.length;
    }

    public void show() {
        System.out.println(Arrays.toString(elements));
    }
}

猜你喜欢

转载自www.cnblogs.com/laolei11/p/10641455.html