数组集合

来源:互联网 发布:阿里云域名如何绑定ip 编辑:程序博客网 时间:2024/06/02 08:48
1.数组
一维,二维,交错数组
多维数组:各个维度不同的多维数组


2.数组序列(ArrayList)
ArrayList是一种较为复杂的数组,其实现了可变大小的一维数组
利用ArrayList的构造函数来创建一个新的列表
public ArrayList();   //.NET默认大小为16
public ArrayList(int capacity);
如果当列表元素达到最大容量时,容量将自动增长1倍
使用需要引用using System.Collections

添加元素:ArrayList有两种方法:Add一次添加一个和AddRange()一次可以添加多个
public int Add(object value)
public void AddRange(ICollection c)


具体实现代码演示:
ArrayList arr1=new ArrayList();
object arr1=new object();
item="Hello";
arr1.Add(item);
item=1;
arr1.Add(item);


//向另一个列表中添加arr1中的所有元素
ArrList arr2=new ArrayList();
arr2.Add(arr1);
//遍历输出arr2中的元素
for(int i=0;i<arr2.Count;i++)
{
console.writeline(arr[2]);
}
//向另一个列表中添加arr1中的所有元素
ArrayList arr3=new ArrayList();
arr3.AddRange(arr1);
//遍历arr3中的元素
结果可以得到,Add只能得到一个二维数组的第一个维元素,AddRange可以得到所有
,并且添加的add和addRange方法只能加到列表最后,如果想要在列表任意位置则需要使用insert方法

删除元素
ArrayList中支持删除元素的方法由3个
pubic void Remove(object obj) obj表示元素值,用于删除数组中特定对象obj的第一个匹配项,参数obj为ArrayList移除的object
public void RemoveAt(int index):用于移除ArrayList的指定索引出的元素
public void RemoveRange(int index,int count)用于从ArrayList 中移除一定范围的元素


查找元素:
ArrayList提供了二分查找的方法BinarySearch(),可以在复杂读度O(logn)内完成
public virtual int BinarySearch(object value);
在整个已经排序的ArrayList中搜索元素,并返回索引


遍历列表
使用foreach语句
foreach(object item in arr1){
console.writeLine("{0}",item); item表示数组的某个元素
}
使用GetEnumerator()方法也可以实现遍历
public virtual IEnumberator GetEnumberator();
方法整个ArrayList的枚举数对象IEnumberator()这个对象可以得到一个集合对象的所有元素,主要属性为Current,用于获取集合中的当前元素
MoveNext:将枚举数推进到集合的下一个元素,当到末尾的时候,枚举数放在集合中最后一个元素后面,并调用MoveNext返回false
Reset;将枚举数设置为初始位置,该位置位于集合中第一个元素之前


使用GetEnumberator方法遍历数组
System.Collections.IEnumberator enm=arr1.GetEnumberator();
while(enm.MoveNext()){console.writeline("{0}",enm.Current);}




3.哈希表(HashTable)
普通意义上的哈希表用于查询数据,键值对<键(key),值(value)>,每个元素都是存在在DictionaryEntry对象中的键/值对,键不能为空引用null,但值可以为null
Hashtable具有的属性有:
Item:获取或设置指定的键相关联的值;
keys:获取包含Hashtable中的键的Icollection;
Values:获取包含Hashtable中的值的ICollection
方法:
Contains:确定Hashtable是否包含特定键
ContainsKey:确定Hashtable是否包含特定键
ContainsValue:确定Hashtable是否包含特定值

构造普通哈希表
哈希函数 key=value%13
即对于任意一个整数值都将通过这个哈希函数得到一个键
f(1)=1; f(15)=2;f(39)=f(13)=0当发生多个值对应于一个键的冲突时,采用线性哈希的方式来消解冲突,即当某一个值添加到哈希表时,如果其键位置已经被另一个数
所占有,那么将向后线性查找
想要构造这个哈希函数,需要使用Hashtable的Add方法添加元素形式为:
public virtual void Add(object key,object value);
该方法将带有指定键和值的元素添加到Hashtable中。


演示步骤
public Hashtable htResult=new Hashtable();  //构造哈希表

public void AddItem(int _intNewItem)
{
int pkey=_intNewItem%13;
int i=0;
//线性哈希,寻找合适哈希位置
while(this.htResult.Contains(pkey)&&i<13)
{pkey=(pkey+1)%13; i++;
}
//判断变量i 
if(i<13){this.htResult.Add(pkey,_intNewItem);else{console.WriteLine(“哈希溢出”)}}


哈希类本身并不具有排序功能,如果想进行排序,则需要使用SortedList类
SortedList类本质上也是一个哈希表,按键排序,并可按照键和索引访问
SortedList类方法:
GetByIndex:获取SortedList的指定索引处的值
GetKey:获取SortedList的指定索引处的键
GetKeyList:获取SortedList中的键
GetValueList:获取sortedList中的值

搜索排序哈希表
排序哈希表,并提供查询功能
根据值,得出键,然后根据键找到位置,如果找不到位置就往下找


4.队列(Queue)
入队Enqueue和出队Dequeue
Queue queue1=new Quenue()  初始化容量32
Queue queue1=new Quenue(100)  容量为100,满了增长为200
Queue queue1=new Quenue(100,1.5f)自动增长1.5倍


元素入队
Queue queue1=new Queue();
object item=new object();
item="hello";
queue1.Enqueue(item);
item=1;
queue1.Enqueue(item);
int[] arr1=new int[]{1,2,3,4}
queue1.Enqueue(arr1)
先进先出



5.堆栈
public Stack()
public Stack(int capacity)  capacity可以指定初始化容量
push入栈
Stack stack1=new Stack();
object item=new object();
item="hello";
stack1.Push(item);
//数组Arr1={1,2,3}
int[] arr1=new int[]{1,2,3};
stack1.push(arr1);
foreach(object o in stack1)
{console.writeline("{0}",o);
}



出栈 pop
与入栈类型





原创粉丝点击