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的更多相关文章

  1. Java探索之旅(10)——数组线性表ArrayList和字符串生成器StringBuffer/StringBuilder

    1.数组线性表ArrayList 数组一旦定义则不可改变大小.ArrayList可以不限定个数的存储对象.添加,插入,删除,查找比较数组更加容易.可以直接使用引用类型变量名输出,相当于toString ...

  2. 顺序线性表 ---- ArrayList 源码解析及实现原理分析

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...

  3. 数组线性表ArrayList 和链表类LinkedList

    数组线性表类ArrayList 和链表类LinkedList 是实现List接口的两个具体类.ArrayList 数组储存元素,这个数组是动态创建的.如果元素个数超过了数组的容量,就创建一个更大的新数 ...

  4. 01线性表顺序存储_List--(线性表)

    #include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...

  5. Java 线性表、栈、队列和优先队列

    1.集合 2.迭代器 例子: 3.线性表 List接口继承自Collection接口,有两个具体的类ArrayList或者LinkedList来创建一个线性表 数组线性表ArrayList Linke ...

  6. Java学习笔记(2)----散列集/线性表/队列/集合/图(Set,List,Queue,Collection,Map)

    1. Java集合框架中的所有实例类都实现了Cloneable和Seriablizable接口.所以,它们的实例都是可复制和可序列化的. 2. 规则集存储的是不重复的元素.若要在集合中存储重复的元素, ...

  7. 集合线性表--List之ArrayList

    集合操作——线性表 List: add().remove().subList().list.toArray().array.asList(). List排序:  Collections.sort(li ...

  8. 线性表之何时使用ArrayList、LinkedList?

    前言 线性表不仅可以存储重复的元素,而且可以指定元素存储的位置并根据下表访问元素. List接口的两个具体实现:数组线性表类ArrayList.链表类LinkedList. ArrayList Arr ...

  9. 数据结构之线性顺序表ArrayList(Java实现)

    一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...

随机推荐

  1. STL之list

    list是一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块,一个前驱指针和一个后驱指针.它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并且由指针将有 ...

  2. android——从零开始

     一.JDK(不用安装)1.下载适合的jdk2.配置环境变量 添加一系统边=变量       JAVA_HOME=D:\Java\jdk1.8.0_91      CLASSPATH=.;%JAVA_ ...

  3. Android课程---关于下拉列表与状态栏提示的学习

    activity_ui7.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  4. Mysql5.6主从热备配置

    数据库是应用系统的核心,为了保证数据库的安全采用主从热备是很常见的方法,也就是主数据库DDL.DML都将被同步到从数据库. 一.      实验环境 操作系统:windowsserver 2008 R ...

  5. 读取java目录中相同目录、相同名称的文件

    使用ClassLoader的getResources方法(注意,不是getResource,少了s),可获得指定文件的包含jar包名称的多个路径值,然后依次读取文件即可. 使用class,只能通过ge ...

  6. P1041 传染病控制

    #include <bits/stdc++.h> using namespace std; const int maxn = 301; std::vector<int> son ...

  7. HTML 播放器 写给自己

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  8. windows下hla编译环境配置(转)_1

    原文地址:http://blog.chinaunix.net/uid-20548989-id-1667169.html HLA简介         HLA,英文"High Level Ass ...

  9. tp文件上传;org/RBAC.class.php 权限类;think/page,class,php分页类;

    一.上传表单: 注意,要使用上传功能 你的表单需要设置 enctype="multipart/form-data" <form action="__URL__/up ...

  10. pdb调试技巧

    1.先import pdb 在适当的位置加上pdb.set_trace(),在cmd中运行脚本,就可以看到调试的提示符 2.常用的调试命令 h(elp),会打印当前版本,pdb可用的命令,如果要查询某 ...