1:ArrayList 和 Hashtable(哈希表)
1.1:ArrayList
ArrayList list = new ArrayList();
list.Add();
list.AddRange();
list.Clear(); //清空所有元素
list.Remove(); //删除单个元素
list.RemoveAt(); //根据下标去删除
list.RemoveRange(); //根据下标去移除一定范围的元素
list.Sort(); //升序排列
list.Reverse(); //反转
list.Insert(); //在指定的位置插入一个元素
list.InsertRange(); //在指定的位置插入一个集合
1.2:ArrayList集合的长度问题
每次集合中实际包含的元素个数(count)超过了可以包含的元素的个数(capcity)的时候,
集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用。
C#是一门强类型语言:在代码中,必须对每一个变量的类型有一个明确的定义。
Js是一门弱类型语言:var
var使用的时候必须已经初始化(隐式类型的局部变量必须已经初始化)
1.3:Hashtable 键值对集合
在键值对集合中,我们是根据键去找值的。
键值对对象[键] = 值;
判断是否包含某个键,hashtableObj.ContainsKey("KeyValue");
1.4:ArrayList 和 Hashtable 集合
1):长度不定
2):数据类型不定,可以是任何类型
3):从ArrayList 和Hashtable中取出的数据都是Object类型
2:List集合(泛型集合) 和 Dictionary<TKey,TValue>
2.1:List集合(泛型集合)
2.2:Dictionary<TKey,TValue>
Dictionary<int,string> dic=new Dictionary<int,string>();
foreach(KeyValuePair<int,string> kv in dic)
{
Console.WriteLine("{0}---{1}",kv.Key,kv.Value);
}
//dic中不存在key,添加key/value
dic.Add(key,value);
dic[key]=value;
3:集合<==>数组
3.1:集合转换为数组
List<T> li = new List<T>();
li.ToArray();
3.2:数组转换为集合
char[] chs = new char[]{'a','b','c',};
List<char> listChar = chs.ToList();
4:ArrayList和Hashtable为什么用的很少?
会发生装箱/拆箱操作,影响程序执行效率
4.1:装箱/拆箱
装箱:就是将值类型转换为引用类型。
拆箱:将引用类型转换为值类型。
看两种类型是否发生了装箱/拆箱,要看这两种类型是否存在继承关系。
若存在,则可能发生装箱/拆箱,若不存在,则不可能发生装箱/拆箱。