zoukankan      html  css  js  c++  java
  • 自定义数组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));
        }
    }
  • 相关阅读:
    Hibernate Validator
    RocketMQ之八:重试队列,死信队列,消息轨迹
    使用hibernate validator出现
    Hibernate Validator--创建自己的约束规则
    Java应用中使用ShutdownHook友好地清理现场、退出JVM的2种方法
    笔者带你剖析轻量级Sharding中间件——Kratos1.x
    [caffe]深度学习之图像分类模型VGG解读
    类的载入机制
    机器人api(图灵机器人)
    回文串问题总结
  • 原文地址:https://www.cnblogs.com/laolei11/p/10641455.html
Copyright © 2011-2022 走看看