MyArrayList的实现

MyArrayList的实现

定义两个接口MyList和MyIterator。定义好集合和迭代器的规则(方法只实现增删改查及迭代器)

 public interface MyList<E> extends Iterable<E> {
 ​
     boolean add(E e);
 ​
     void add(int index, E e);
 ​
     E remove(int index);
 ​
     boolean remove(Object obj);
 ​
     void clear();
 ​
     boolean contains(Object obj);
 ​
     E get(int index);
 ​
     int index(Object obj);
 ​
     int lastIndexOf(Object obj);
 ​
     MyIterator<E> iterator();
 ​
     MyIterator<E> iterator(int index);
     
 }
 import java.util.Iterator;
 ​
 public interface MyIterator<E> extends Iterator<E> {
     boolean hasNext();
 ​
     boolean hasPrevious();
 ​
     E next();
 ​
     E previous();
 ​
     int nextIndex();
 ​
     int prevIndex();
 ​
     void add(E e);
 ​
     void remove();
 ​
     void set(E e);
 }

对于ArrayList,要对其常量、属性、构造方法、API进行设计

常量:要确定底层数组的最大容量和默认容量

 private static final int DEFAULT_CAPACITY = 10;
 private static final int MAX_CAPACITY = Ineger.MAX_VALUE - 8;

 

属性:底层是数组

 private Object[] elements;
 private int size;
 private int modCount;   //统计集合结构修改的次数,验证迭代器是否失效

 

构造方法

 public MyArrayList() {
     elements = new Object[DEFAULT_CAPACITY];
 }
 ​
 public MyArrayList(int initialCapacity) {
     if (initialCapacity <= 0 || initialCapacity > MAX_CAPACITY)
         throw new IllegalArgumentException("initialCapacity=" + initialCapacity);
     elements = new Object[initialCapacity];
 }

 

API:

增: boolean add(E e) void add(int index, E e)

tips:

  • 计算扩容长度时,可以使用移位运算符

  • 在grow()扩容方法中,要记得将elements数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是C++实现的一个MyArrayList,其中包含了常见的数组操作函数: ```c++ #include <iostream> #include <stdexcept> template <typename T> class MyArrayList { private: T *data; int size; int capacity; public: MyArrayList(int capacity = 10) { this->capacity = capacity; data = new T[capacity]; size = 0; } ~MyArrayList() { delete[] data; } int getSize() const { return size; } bool isEmpty() const { return size == 0; } void add(int index, T e) { if (index < 0 || index > size) throw std::invalid_argument("Add failed. Index is invalid."); if (size == capacity) resize(2 * capacity); for (int i = size - 1; i >= index; i--) data[i + 1] = data[i]; data[index] = e; size++; } void addLast(T e) { add(size, e); } void addFirst(T e) { add(0, e); } T get(int index) const { if (index < 0 || index >= size) throw std::invalid_argument("Get failed. Index is invalid."); return data[index]; } void set(int index, T e) { if (index < 0 || index >= size) throw std::invalid_argument("Set failed. Index is invalid."); data[index] = e; } bool contains(T e) const { for (int i = 0; i < size; i++) { if (data[i] == e) return true; } return false; } int find(T e) const { for (int i = 0; i < size; i++) { if (data[i] == e) return i; } return -1; } T remove(int index) { if (index < 0 || index >= size) throw std::invalid_argument("Remove failed. Index is invalid."); T ret = data[index]; for (int i = index + 1; i < size; i++) data[i - 1] = data[i]; size--; if (size == capacity / 4 && capacity / 2 != 0) resize(capacity / 2); return ret; } T removeFirst() { return remove(0); } T removeLast() { return remove(size - 1); } void removeElement(T e) { int index = find(e); if (index != -1) remove(index); } private: void resize(int newCapacity) { T *newData = new T[newCapacity]; for (int i = 0; i < size; i++) newData[i] = data[i]; delete[] data; data = newData; capacity = newCapacity; } }; int main() { MyArrayList<int> arr; for (int i = 0; i < 10; i++) arr.addLast(i); arr.add(1, 100); std::cout << arr.get(1) << std::endl; arr.remove(2); arr.removeElement(4); for (int i = 0; i < arr.getSize(); i++) std::cout << arr.get(i) << " "; std::cout << std::endl; return 0; } ``` 这个MyArrayList实现了动态扩展,可以在插入元素时自动扩容,也可以在删除元素时自动缩容。同时,还实现了常见的数组操作函数,例如在指定位置插入元素、在末尾添加元素、在头部添加元素、获取指定位置的元素、修改指定位置的元素、查找指定元素是否存在、查找指定元素的位置、删除指定位置的元素、删除第一个元素、删除最后一个元素、删除指定元素等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值