title: 【学习之路】ArrayList封装
draft: true
tags:


新建一个工程命名为ArrayBox

我们先定义三个私有属性,分别为:数组的默认长度,数组有效元素个数,数组

  1. //数组默认长度
  2. private static final int BOX_VALUE = 10;
  3. //数组有效元素个数
  4. private int size;
  5. //数组
  6. private int[] dynamicArray;

再定义两个构造方法,分别为:数组默认长度、用户自定义长度

  1. //数组默认长度
  2. public ArrayBox(){
  3. dynamicArray = new int[BOX_VALUE];
  4. }
  5. //用户自定义长度
  6. public ArrayBox(int capacity){
  7. dynamicArray = new int[capacity];
  8. }

ArrayBox的add添加方法

  1. //用户可以调用的add添加方法
  2. public boolean add(int value){
  3. //先判断长度是否够用
  4. judge(size + 1);
  5. this.dynamicArray[size++] = value;
  6. return true;
  7. }
  8. //扩容前先判断数组长度是否足够
  9. private void judge(int value){
  10. //判断长度是否够用
  11. if (value - dynamicArray.length > 0){
  12. dilatation(value);
  13. }
  14. }
  15. //长度不够时进行扩容
  16. private void dilatation(int minCapacity){
  17. int oldValue = dynamicArray.length;
  18. //扩容原来长度的1.5倍
  19. int newCapacity = oldValue + (oudValue >> 1);
  20. //如果扩容1.5倍还是不够用就用当前长度
  21. if (newCapacity - minCapacity < 0){
  22. newCapacity = minCapacity
  23. }
  24. //将新数组的地址给旧数组
  25. this.dynamicArray = newArray(dynamicArray, newCapacity)
  26. }
  27. private int[] newArray(int[] oldArray, newCapacity){
  28. int[] newArray = new int[newCapacity];
  29. //将旧数组的元素放到新数组内
  30. for (int i = 0; i < oldArray.length; i++){
  31. newArray[i] = oldArray[i];
  32. }
  33. return newArray;
  34. }

ArrayBox删除方法

  • 这里需要注意由于用户可能误操作存在出现异常的可能
  1. //先新建一个类,自定义一个异常
  2. public class BoxIndexOutOfBoundsException extends RuntimeException{
  3. public BoxIndexOutOfBoundsException(){}
  4. public BoxIndexOutOfBoundsException(String msg){
  5. super(msg);
  6. }
  7. }
  8. private void range(int index){
  9. if (index < 0 || index >= size){
  10. throw new BoxIndexOutOfBoundsException("Index:" + index + ",Size:" + size)
  11. }
  12. }
  • 删除方法
    1. public int remove(int index){
    2. //先检测index是否合法
    3. range(index);
    4. int oldValue = dynamicArray[index];
    5. //把元素一个个向前移动
    6. for (int i = index; i < size - 1; i++){
    7. dynamicArray[i] = dynamicArray[i + 1];
    8. }
    9. //减少size的有效元素个数
    10. dynamicArray[--size] = 0;
    11. return oldValue;
    12. }

ArrayBox获取元素方法

  1. public int get(int index){
  2. //先检测index是否合法
  3. range(index);
  4. return dynamicArray[index];
  5. }
  6. // 获取有效元素个数
  7. public int getSize(){
  8. return size;
  9. }