• 自定义数组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;
        }
    
    }

    自定义数组整合所有代码

    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));
        }
    }
  • 相关阅读:
    运算符
    练习
    JAVA学习日报 9/23
    JAVA学习日报 8.22
    JAVA学习日报 8.21
    第一节:SpringMVC 处理请求数据【1】
    第六节:@RequestMapping 映射请求占位符 @PathVariable 注解
    第一节:REST 风格的URL地址约束
    第二节:REST风格的案例及源码分析
    (一)IOC 容器:【1】@Configuration&@Bean 给容器中注册组件
  • 原文地址:https://www.cnblogs.com/laolei11/p/10641455.html
Copyright © 2020-2023  润新知