利用数组实现简化的List

1 篇文章 0 订阅

前言

复习下数组的使用方式,仿照List用oc实现下数组的增删改查

功能

  1. 初始化时给定数组的容量
  2. 插入数据
  3. 删除数据
  4. 根据下标返回数据

代码

  1. 声明头文件
    ​ 头文件中包含了6个对象方法,如下:

    • initWithCapacity
      用于初始化数组容量

    • find
      根据下标查找数据

    • remove
      根据下标删除数据

    • insert
      根据下标插入数据

    • add
      尾部追加数据

    • printAll
      打印所有数据

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface CustomArray : NSObject

 //初始化方法
- (instancetype) initWithCapacity: (NSUInteger) capacity;
//根据下标返回对应的值
- (id)find:(NSUInteger) index;
//根据下标删除对应的值
- (void)remove:(NSUInteger) index;
//插入指定位置
- (void)insert:(id)anObject atIndex:(NSUInteger) index;
//尾部追加
- (void)add: (id)anObject;
//打印所有
- (void)printAll;

@end

NS_ASSUME_NONNULL_END
  1. 各个方法的实现

    1. 定义成员变量

      @implementation MyArray
      {
        	//可变数组
          @private
          NSMutableArray *_data;
        	//起始容量
          NSUInteger _capacity;
        	//数组中存储的数据大小
          NSUInteger _count;
      }
      
    2. initWithCapacity

      初始化,传入起始容量。

      - (instancetype)initWithCapacity:(NSUInteger)capacity {
          self = [super init];
          if (self) {
              _data = [NSMutableArray arrayWithCapacity:capacity];
              _capacity = capacity;
              _count = 0;
          }
          return self;
      }
      
    3. find

      根据下标返回元素

      - (id)find:(NSUInteger)index {
          if (index >= _count) {
              return nil;
          }
          return _data[index];
      }
      
    4. remove

      根据下标,删除数据

      - (void)remove:(NSUInteger)index {
          if (index >= _count) {
              [NSException raise:NSRangeException format:@"Index out of rang."];
          }
          for (NSUInteger i = index; i < _count - 1; i++) {
              _data[i] = _data[i + 1];
          }
          _count--;
      }
      

      删除数据时,后边的元素依次向前移一个位置,同时,总数-1

    5. insert

      根据下标,插入数据

      - (void)insert:(id)anObject atIndex:(NSUInteger)index {
          if (index >= _count || _capacity == _count) {
              [NSException raise:NSRangeException format:@"Index out of range."];
          }
          for (NSUInteger i = _count - 1; i >= index; i--) {
              _data[i + 1] = _data[i];
          }
          _data[index] = anObject;
          _count++;
      }
      
      

      插入数据时,后边的元素依次向后一个位置,同时,总数+1

    6. add

      添加一个数据

      - (void)add:(id)anObject {
          if (_count == _capacity) {
              [NSException raise:NSRangeException format:@"Array is full."];
          }
          [_data addObject:anObject];
          _count++;
      }
      
    7. printAll

      - (void)printAll {
          for (id obj in _data) {
              NSLog(@"%@",obj);
          }
      }
      

所有的操作,一定要注意**下标**的判断!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值