自定义一个数组结构的集合-----MyArrayList

本文介绍了如何自定义一个基于数组的数据结构集合MyArrayList,详细阐述了从需求分析到接口设计,再到实现类的编写和测试全过程。通过测试增加、删除、修改和查询等基本操作,验证了MyArrayList的功能实现。
摘要由CSDN通过智能技术生成

相信大家都使用过ArrayList,它是一个底层基于数组实现的List。
在这里,我们来自定义写一个MyArrayList


首先,我们确认我们所需的功能

//集合可以实现存储指定数据类型

//可以实现对数据的增删改查

//add:可以在末尾添加元素,可以在集合中插入元素

//remove:可以通过下标删除元素,可以通过对象删除出现的第一个元素

//set:可以通过下标更改元素的对象

//get:可以通过下标获取元素对象

//可以实现迭代器,遍历集合

//(小伙伴可以根据自己爱好增加功能)..........


然后,我们开始按需求写接口

package com.shaw.ArrayList;

import java.util.Iterator;

/**
 * 自定义数据结构的方法抽象
 * @author Lindsey Shaw
 * @date 2018年6月11日
 */
public interface MyList<E> {
    /**
     * 功能描述: 在末尾增加一个元素
     */
    boolean add(E obj);

    /**
     * 功能描述: 在指定下标处插入元素
     */
    boolean add(int index, E obj);

    /**
     * 功能描述: 清除容器所有内容,但容器容量不变
     */
    void clear();

    /**
     * 功能描述: 是否包含对象
     */
    boolean contains(Object obj);

    /**
     * 功能描述: 通过下标得到集合对象
     */
    E get(int index);

    /**
     * 功能描述: 判断集合是否为空
     */
    boolean isEmpty();

    /**
     * 功能描述: 移除下标除的对象
     */
    E remove(int index);

    /**
     * 功能描述: 移除第一个出现的对象
     */
    boolean remove(E obj);

    /**
     * 功能描述: 修改集合下标处对象内容,返回被修改的值
     */
    E set(int index, E obj);

    /**
     * 功能描述: 返回集合大小
     */
    int size();

    /**
     * 功能描述: 将集合返回一个对象数组
     */
    E[] toArray();

    /**
     * 功能描述: 返回集合的迭代器
     */
    Iterator<E> iterable();
}


接着我们创建一个实现类实现这个接口所有方法

package com.shaw.ArrayList;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Objects;

/**
 * 自定义数据结构,实现基本的增删改查
 *
 * @author Lindsey Shaw
 * @date 2018年6月11日
 */
public class MyArrayList<E> implements MyList<E> {
   
    //初始化容量大小
    private static final int default_capacity = 10;

    //用于共享空实例数组
    private final Object[] Empty_ElementData = {};

    //默认数组容器
    private Object[] ElementData;

    //初始大小
    private int size;

    //可以通过构造函数改变默认容量
    public MyArrayList(int initial) throws IllegalAccessException {
        if (initial > 0) {
  //当设置值大于0时,按设置值设置
            ElementData = new Object[initial];
        } else if (initial == 0) {
  //设置值等于0时为空
            ElementData = Empty_ElementData;
        } else {
            throw new IllegalAccessException("初始化数值为:" + initial);
        }
    }

    //默认容量为10
    public MyArrayList() {
        ElementData = new Object[default_capacity];
    }


    @Override
    public boolean add(E obj) {
        //验证容量是否需要扩容
        CheckCapacity();
        ElementData[size++] = obj;
        return true;
    }

    //如果集合大小将要大于容器容量时,就扩容
    private void CheckCapacity() {
        if (size + 1 > ElementData.length) {
            grow();
        }
    }

    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值