工作算的上是一年了,但是这一年大多数时间都在玩游戏,混日子。大学虽然学过数据结构,但是听的迷迷糊糊。完全没有听懂。以下记录一下学习数据结构的过程,方便自己和他人复习。
数据结构在我理解中就是数据和数据中间的存储关系。数组是一种最常见的数据结构。优点是查询速度很快,但是删除效率很低,要移动各个数组。
数组插入
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)); } }