01.线性表 ArrayList
public class MyArrayList
{
//容量
private const int _defaultCapacity = ;
//存放数组元素
private object[] _items;
//数组大小
private int _size;
//元素个数为0的数组状态
private static readonly object[] emptyArray = new object[]; public MyArrayList()
{
this._items = emptyArray;
} public MyArrayList( int capacity)
{
if (capacity<)
{
throw new ArgumentOutOfRangeException("capacity","ArrayList的容量不可为负数!");
}
this._items = new object[capacity];
} //索引器
public virtual object this[int index]
{
get
{
if (index<||index>=this._size)
{
throw new ArgumentOutOfRangeException("index","索引超出范围!");
}
return this._items[index];
} set
{
if (index < || index >= this._size)
{
throw new ArgumentOutOfRangeException("index", "索引超出范围!");
}
this._items[index] = value;
} } //当前数组元素个数
public virtual int Count
{
get {return this._size ;}
} //数组的容量
public virtual int Capacity
{
get { return this._items.Length; }
set
{
if (value!=this._items.Length)
{
if (value<this._size)
{
throw new ArgumentOutOfRangeException("value","容量太小");
}
if (value > )
{//开辟新内存空间存储元素
object[] dest = new object[value];
if (this._size > )
{//搬动元素
Array.Copy(this._items, , dest, , this._size);
}
this._items = dest;
}
else//数组最小的空间为4
{
this._items=new object[_defaultCapacity];
}
}
}
} //元素的添加
public virtual int Add(object value)
{//当空间已满
if (this._size==this._items.Length)
{
this.EnsureCapacity(this._size+);
}
this._items[this._size] = value;
return this._size++;
} //扩容
private void EnsureCapacity(int p)
{
if (this._items.Length<p)
{//空间加倍
int num = (this._items.Length == ) ? _defaultCapacity : (this._items.Length * );
if (num < p)
{
num = p;
}
this.Capacity = num;
}
} //指定位置插入元素
public virtual void Insert( int index,object value)
{
if (index<||index>this._size)
{
throw new ArgumentOutOfRangeException("index","索引超出范围!");
}
if (this._size==this._items.Length)
{
this.EnsureCapacity(this._size + );
}
if (index<this._size)
{
Array.Copy(this._items, index, this._items, index + , this._size - index);
}
this._items[index] = value;
this._size++;
} //移除指定索引的元素
public virtual void Remove(int index)
{
if (index < || index > this._size)
{
throw new ArgumentOutOfRangeException("index", "索引超出范围!");
}
this._size--;
if (index<this._size)
{
Array.Copy(this._items,index+,this._items,index,this._size-index);
}
this._items[this._size]=null;
} //裁剪空间
public virtual void TrimToSize()
{
this.Capacity = this._size;
}
}
01.线性表 ArrayList的更多相关文章
- Java探索之旅(10)——数组线性表ArrayList和字符串生成器StringBuffer/StringBuilder
1.数组线性表ArrayList 数组一旦定义则不可改变大小.ArrayList可以不限定个数的存储对象.添加,插入,删除,查找比较数组更加容易.可以直接使用引用类型变量名输出,相当于toString ...
- 顺序线性表 ---- ArrayList 源码解析及实现原理分析
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...
- 数组线性表ArrayList 和链表类LinkedList
数组线性表类ArrayList 和链表类LinkedList 是实现List接口的两个具体类.ArrayList 数组储存元素,这个数组是动态创建的.如果元素个数超过了数组的容量,就创建一个更大的新数 ...
- 01线性表顺序存储_List--(线性表)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...
- Java 线性表、栈、队列和优先队列
1.集合 2.迭代器 例子: 3.线性表 List接口继承自Collection接口,有两个具体的类ArrayList或者LinkedList来创建一个线性表 数组线性表ArrayList Linke ...
- Java学习笔记(2)----散列集/线性表/队列/集合/图(Set,List,Queue,Collection,Map)
1. Java集合框架中的所有实例类都实现了Cloneable和Seriablizable接口.所以,它们的实例都是可复制和可序列化的. 2. 规则集存储的是不重复的元素.若要在集合中存储重复的元素, ...
- 集合线性表--List之ArrayList
集合操作——线性表 List: add().remove().subList().list.toArray().array.asList(). List排序: Collections.sort(li ...
- 线性表之何时使用ArrayList、LinkedList?
前言 线性表不仅可以存储重复的元素,而且可以指定元素存储的位置并根据下表访问元素. List接口的两个具体实现:数组线性表类ArrayList.链表类LinkedList. ArrayList Arr ...
- 数据结构之线性顺序表ArrayList(Java实现)
一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...
随机推荐
- 安卓中級教程(5):ScrollView與refreshable之間的設置
設置向下拉動更新. package com.mycompany.Scroll_test; import android.app.*; import android.os.*; import andro ...
- 【资料下载区】【iCore3相关代码、资料下载地址】更新日期2017/1/5
[iCore3 ARM代码下载地址][全部]DEMO1.0测试程序发布例程一:ARM驱动三色LED例程二:读取arm按键状态例程三:EXTI中断输入实验——读取ARM按键状态例程四:USART通信实验 ...
- SQL TOP 子句、SQL LIKE 操作符、SQL 通配符
TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 注释:并非所有的数据库系统都支持 TOP 子句. SQL Server 的语法: S ...
- python写2048小游戏
#!/usr/bin/env python # coding=utf-8 #******************************************************** # > ...
- windows 查看端口占用以及关闭该进程
win+r -> 输入cmd netstat -ano 找到占用端口进程的pid control+shift+esc 打开 任务管理器 menu->'查看'->'选择列->勾选 ...
- iOS用户信息单例的创建
UserInfo.h + (UserInfo *) sharedInstance; UserInfo.m #import "UserInfo.h" static UserInfo ...
- UITextField-修改占位文字和光标的颜色,大小
一.设置占位文字的颜色 方法一:利用富文本 /** 手机号输入框 */ @property (weak, nonatomic) IBOutlet UITextField *phoneTextField ...
- spring_异常提示1
nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource ------- 缺少j ...
- MVC 上传 下载
[上传]带进度条 view 注:添加easyui的js文件 <script type="text/javascript"> function fileSelected ...
- AX2012 引用NOPI 添加图片到EXCEL
void AddPieChart(int rowNum = 4) { System.Byte[] bytes; fileName _fileName; NPOI.HSSF.UserModel.HSSF ...