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;
}