通过下面表格进行对比:
异同点 | ArrayList | Hashtable |
不同点
| 元素只有一部分构成 | 元素有两部分组成,即有Key和Value构成。 |
添加元素时的Add方法只有一个参数就是该元素 | 添加元素时的Add方法只有两个参数,第一个是该元素的Key值,第二个为该元素的Value值 | |
删除元素时,第一可以通过Remove方法,参数为要删除的元素对象;第二可以通过RomoveAt方法,参数是要删除的元素的下标索引值。 | 没有元素下标的概念,所以没有RomoveAt方法。删除元素时,只有通过Remove方法,参数是该元素的Key值 | |
修改元素时,通过下标获得元素后进行修改赋值 | 通过Key值获取元素后进行修改后赋值 | |
取出元素时通过索引下标来取出元素。 | 由于其没有索引下标的概念,所以取出元素不能通过索引,但是有键值的概念,可以通过Key值来取出元素的Value值,类似索引器的形式取值。 | |
遍历元素时可以通过for、while循环(靠下标)进行遍历元素;也可以通过foreach进行循环进行遍历 | 由于没有下标的概念,不能通过for、while循环(没有下标)进行遍历元素,只能通过foreach进行遍历,此时可以通过集合的Keys,Values或者集合本身来遍历(3种形式)。 | |
相同点 | 集合所处的命名空间相同,都是System.Collections,集合都是类,存放元素前都需要先实例化类。 集合中的成员的数据类型都是object类型,添加元素时都需要做装箱操作,取出元素时都需要做拆箱操作(即需要做类型转换); 清空集合元素的方法相同,都是Clear方法; 添加方法都有Add,遍历时都可以通过foreach |
ArrayList集合操作的相关代码:
public partial class frmArrayList : Form
{
ArrayList employees;
SE s;
public frmArrayList()
{
InitializeComponent();
}
private void btnAdd_Click(object sender, EventArgs e)
{
SE se = new SE();
se.No = txtNo.Text;
se.Name = txtName.Text;
se.Age = Convert.ToInt32(txtAge.Text);
int index = employees.Add(se);
s = se;
MessageBox.Show("添加成功后对于的元素索引位置为:"+index);
}
private void Form1_Load(object sender, EventArgs e)
{
employees = new ArrayList() { new SE { No = "s1000", Name = "张三", Age = 20 }, new SE { No = "s1001", Name = "李四", Age = 21 }, new SE{No="s1002",Name="王五",Age=22}};
}
private void btnCount_Click(object sender, EventArgs e)
{
MessageBox.Show("ArrayList集合中元素的个数为:"+employees.Count);
}
private void btnShow_Click(object sender, EventArgs e)
{
int index = -1;
bool bSuccess = int.TryParse(txtIndex.Text.Trim(), out index);
if (bSuccess)
{
if (index > employees.Count -1)
{
MessageBox.Show("输入的索引下标超出范围");
}
else
{
SE s = (SE)employees[index];
MessageBox.Show(s.Show());
}
}
else
{
MessageBox.Show("请输入整数类型!");
}
}
private void btnForeach_Click(object sender, EventArgs e)
{
for (int i = 0; i < employees.Count; i++)
{
MessageBox.Show(((SE)employees[i]).Show());
}
MessageBox.Show("------Foreach的遍历信息-----------");
foreach (object o in employees)
{
SE s = (SE)o;
MessageBox.Show(s.Show());
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
MessageBox.Show("删除前的集合中的所有素为:");
for (int i = 0; i < employees.Count; i++)
{
MessageBox.Show(((SE)employees[i]).Show());
}
employees.RemoveAt(1);
MessageBox.Show("删除索引下标为1的元素后的集合中的元素为:");
for (int i = 0; i < employees.Count; i++)
{
MessageBox.Show(((SE)employees[i]).Show());
}
employees.Remove(s);
MessageBox.Show("删除最后添加的元素后的集合中的元素为:");
for (int i = 0; i < employees.Count; i++)
{
MessageBox.Show(((SE)employees[i]).Show());
}
employees.Clear();
MessageBox.Show("清空集合后的集合中的元素为:");
for (int i = 0; i < employees.Count; i++)
{
MessageBox.Show(((SE)employees[i]).Show());
}
}
}
Hashtable集合操作的相关代码:
public partial class frmHashtable : Form
{
Hashtable employees;
public frmHashtable()
{
InitializeComponent();
}
private void btnAdd_Click(object sender, EventArgs e)
{
SE se = new SE();
se.No = txtNo.Text;
se.Name = txtName.Text;
se.Age = Convert.ToInt32(txtAge.Text);
employees.Add(se.No, se);
MessageBox.Show("添加成功!");
}
private void Form1_Load(object sender, EventArgs e)
{
employees = new Hashtable();
SE s1 = new SE();
s1.No = "s0001";
s1.Name = "张三";
s1.Age = 19;
SE s2 = new SE();
s2.No = "s0002";
s2.Name = "李四";
s2.Age = 22;
SE s3 = new SE();
s3.No = "s0003";
s3.Name = "王五";
s3.Age = 20;
employees.Add(s1.No, s1);
employees.Add(s2.No, s2);
employees.Add(s3.No, s3);
}
private void btnCount_Click(object sender, EventArgs e)
{
MessageBox.Show("Hashtable集合中元素的个数为:"+employees.Count);
}
private void btnShow_Click(object sender, EventArgs e)
{
SE se = (SE)employees[txtSeNo.Text];
MessageBox.Show(se.Show());
}
private void btnForeach_Click(object sender, EventArgs e)
{
MessageBox.Show("------Foreach的keys 遍历信息-----------");
foreach (object o in employees.Keys)
{
SE s = (SE)employees[o.ToString()];
MessageBox.Show(s.Show());
}
MessageBox.Show("------Foreach的values 遍历信息-----------");
foreach (object o in employees.Values)
{
SE s = (SE)o;
MessageBox.Show(s.Show());
}
MessageBox.Show("------Foreach的Hashtable 遍历信息-----------");
foreach (DictionaryEntry de in employees)
{
MessageBox.Show("元素的key为:"+de.Key.ToString()+",元素的信息为:"+((SE)de.Value).Show());
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
employees.Remove("s0002");
MessageBox.Show("删除员工的编号为's0002'后的集合中的元素为:");
foreach (object o in employees.Values)
{
SE s = (SE)o;
MessageBox.Show(s.Show());
}
employees.Clear();
MessageBox.Show("清空集合后的集合中的元素为:");
foreach (object o in employees.Values)
{
SE s = (SE)o;
MessageBox.Show(s.Show());
}
}
}