title: 【学习之路】ArrayList封装
draft: true
tags:
- 学习之路
- Java
- 集合
categories: - JavaSE
- 集合
cover: https://cdn.jsdelivr.net/gh/CodeZixuan/Blog_Images/444.jpg
abbrlink: 55725
date: 2020-05-10 16:00:30
新建一个工程命名为ArrayBox
我们先定义三个私有属性,分别为:数组的默认长度,数组有效元素个数,数组
//数组默认长度private static final int BOX_VALUE = 10;//数组有效元素个数private int size;//数组private int[] dynamicArray;
再定义两个构造方法,分别为:数组默认长度、用户自定义长度
//数组默认长度public ArrayBox(){dynamicArray = new int[BOX_VALUE];}//用户自定义长度public ArrayBox(int capacity){dynamicArray = new int[capacity];}
ArrayBox的add添加方法
//用户可以调用的add添加方法public boolean add(int value){//先判断长度是否够用judge(size + 1);this.dynamicArray[size++] = value;return true;}//扩容前先判断数组长度是否足够private void judge(int value){//判断长度是否够用if (value - dynamicArray.length > 0){dilatation(value);}}//长度不够时进行扩容private void dilatation(int minCapacity){int oldValue = dynamicArray.length;//扩容原来长度的1.5倍int newCapacity = oldValue + (oudValue >> 1);//如果扩容1.5倍还是不够用就用当前长度if (newCapacity - minCapacity < 0){newCapacity = minCapacity}//将新数组的地址给旧数组this.dynamicArray = newArray(dynamicArray, newCapacity)}private int[] newArray(int[] oldArray, newCapacity){int[] newArray = new int[newCapacity];//将旧数组的元素放到新数组内for (int i = 0; i < oldArray.length; i++){newArray[i] = oldArray[i];}return newArray;}
ArrayBox删除方法
- 这里需要注意由于用户可能误操作存在出现异常的可能
//先新建一个类,自定义一个异常public class BoxIndexOutOfBoundsException extends RuntimeException{public BoxIndexOutOfBoundsException(){}public BoxIndexOutOfBoundsException(String msg){super(msg);}}private void range(int index){if (index < 0 || index >= size){throw new BoxIndexOutOfBoundsException("Index:" + index + ",Size:" + size)}}
- 删除方法
public int remove(int index){//先检测index是否合法range(index);int oldValue = dynamicArray[index];//把元素一个个向前移动for (int i = index; i < size - 1; i++){dynamicArray[i] = dynamicArray[i + 1];}//减少size的有效元素个数dynamicArray[--size] = 0;return oldValue;}
ArrayBox获取元素方法
public int get(int index){//先检测index是否合法range(index);return dynamicArray[index];}// 获取有效元素个数public int getSize(){return size;}
