如果要動態地改變數組所占用內存空間的大小
現實中
但是這個解決方案還存在問題
C#中的ArrayList正是采用上述方法來動態改變數組大小的
下面列出了ArrayList的部分核心代碼
【ArrayList
using System;
namespace LinearList
{
public class ArrayList
{
// 成員變量
private const int _defaultCapacity =
private object[] _items; //用於存放元素的數組
private int _size; //指示當前元素個數
//當元素個數為零時的數組狀態
private static readonly object[] emptyArray = new object[
// 方法
public ArrayList() //默認構造方法
{ //這樣做可以避免元素個數為零時的訪問出錯
this
}
//指定ArrayList初始容量的構造方法
public ArrayList(int capacity)
{
if (capacity <
{ //當容量參數為負數時引發異常
throw new ArgumentOutOfRangeException(
}
//按照capacity參數指定的長度的值初始化數組
this
}
//添加一個方法
public virtual int Add(object value)
{ //當空間滿時
if (this
{ //調整空間
this
}
this
return this
}
//動態調整數組空間
private void EnsureCapacity(int min)
{
if (this
{ //空間加倍
int num = (this
_defaultCapacity : (this
if (num < min)
{
num = min;
}
//調用Capacity的set訪問器以按照num的值調整數組空間
this
}
}
//在指定索引入插入指定元素
public virtual void Insert(int index
{
if ((index <
{
throw new ArgumentOutOfRangeException(
}
if (this
{ //當空間滿時調整空間
this
}
if (index < this
{ //插入點後面的所有元素向後移動一位
Array
this
}
this
this
}
//移除指定索引的元素
public virtual void RemoveAt(int index)
{
if ((index <
{
throw new ArgumentOutOfRangeException(
}
this
if (index < this
{ //使被刪除元素後的所有元素向前移動一位
Array
this
}
this
}
//裁減空間
public virtual void TrimToSize()
{
this
}
// 屬性
public virtual int Capacity //指示ArrayList的存儲空間
{
get
{
return this
}
set
{
if (value != this
{
if (value < this
{
throw new ArgumentOutOfRangeException(
}
if (value >
{ //開辟一塊新的內存空間存儲元素
object[] destinationArray = new object[value];
if (this
{ //把元素搬遷到新空間內
Array
destinationArray
}
this
}
else //最小空間為_defaultCapacity所指定的數目
{
this
}
}
}
}
public virtual int Count //只讀屬性
{
get
{
return this
}
}
public virtual object this[int index] //索引器
{
get //獲取指定索引的元素值
{
if ((index <
{
throw new ArgumentOutOfRangeException(
}
return this
}
set //設置指定索引的元素值
{
if ((index <
{
throw new ArgumentOutOfRangeException(
}
this
}
}
}
}
上述代碼通過在一個數組(第
這裡實現了
第二種初始化方法為
ArrayList arr = new ArrayList(
當可以預見ArrayList所操作的大概元素個數時
int num = (this
可以得知
object[] destinationArray = new object[value];
創建了一個新的object數組
Array
把_items數組中的元素全部拷貝到新數組destinationArray中
this
使用於存放數據的成員變量_items指向新的數組對象destinationArray
下面對ArrayList類進行測試
【例
新建一個控制台應用程序
using LinearList;
並在Main方法中輸入如下代碼
using System;
using LinearList;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
ArrayList arr = new ArrayList();
Console
arr
Console
for (int i =
{ //添加
arr
}
Console
for (int i =
{ //添加
arr
}
Console
for (int i =
{
Console
}
//刪除兩個元素
arr
arr
Console
for (int i =
{
Console
}
Console
Console
arr
Console
Console
}
}
}
運行結果
由運行結果可以得知
數組和ArrayList的本質區別在於前者是類型安全的
【例
本例使用了C#類庫中的ArrayList而不是前面自定義的ArrayList
using System;
using System
namespace Demo
{
class Program
{
static void Main(string[] args)
{
int[] arr = new int[
arr[
arr[
int result = arr[
Console
ArrayList arrL = new ArrayList();
arrL
arrL
result = (int)arrL[
Console
Console
}
}
}
運行結果
本例使用數組和ArrayList分別做了相同的事情
其次數組沒有添加元素的功能
最後
ArrayList的這個特點帶來了類型安全問題
ArrayList arrL = new ArrayList();
arrL
arrL
arrL
以上代碼在集合中存放了各種各樣的數據類型
List<int> arrL=new List<int>();
arrL
arrL
可以看到
From:http://tw.wingwit.com/Article/program/net/201311/12729.html