黑马程序员——关于集合类的总结笔记

来源:互联网 发布:安卓图像识别 单片机 编辑:程序博客网 时间:2024/04/30 09:15
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
我们用的比较多的非泛型集合类主要有 ArrayList类 和HashTable类。

1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,

但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的

2.数组要声明元素的类型,集合类的元素类型却是object.

3.数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只读方式使用集合。

4.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问。

很多时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问!

1.      数组

int[] a;//声明一个一维数组
 
2.      ArrayList类对象被设计成为一个动态数组类型,其容量会随着需要而适当的扩充

方法

第一,Add()向数组中添加一个元素,

第二,Remove()删除数组中的一个元素

第三,RemoveAt(int i)删除数组中索引值为i的元素

第四,Reverse()反转数组的元素

第五,Sort()以从小到大的顺序排列数组的元素

第六,Clone()复制一个数组

3.      List

可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法,在决定使用 List 还是使用 ArrayList 类(两者具有类似的功能)时,记住 List 类在大多数情况下执行得更好并且是类型安全的。如果对 List 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。
 
4.      Dictionary

表示键和值的集合。Dictionary遍历输出的顺序,就是加入的顺序,这点与Hashtable不同

5.      SortedList

与哈希表类似,区别在于SortedList中的Key数组排好序的

6.Hashtable

哈希表,名-值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。

GetHashCode()方法返回一个int型数据,使用这个键的值生成该int型数据。哈希表获取这个值最后返回一个索引,表示带有给定散列的数据项在字典中存储的位置。

Hashtable  Dictionary <K, V> 类型 
 首先
单线程程序中推荐使用Dictionary, 有泛型优势且读取速度较快容量利用更充分.
 其次
多线程程序中推荐使用Hashtable, 默认的 Hashtable 允许单线程写入多线程读取 Hashtable进一步调用 Synchronized() 方法可以获得完全线程安全的类型 Dictionary 非线程安全,必须人为使用lock 语句进行保护效率大减.
 最后
Dictionary 按插入顺序排列数据的特性 (但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便.

HashTable中的key/value均为object类型,由包含集合元素的存储桶组成。存储桶是 HashTable中各元素的虚拟子组,与大多数集合中进行的搜索和检索相比,存储桶可令搜索和检索更为便捷。每一存储桶都与一个哈希代码关联,该哈希代码是使用哈希函数生成的并基于该元素的键。HashTable的优点就在于其索引的方式,速度非常快。如果以任意类型键值访问其中元素会快于其他集合,特别是当数据量特别大的时候,效率差别尤其大。

HashTable的应用场合有:做对象缓存

DictionaryHashTable内部实现差不多,但前者无需装箱拆箱操作,效率略高一点。

 HashTable是经过优化的,访问下标的对象先散列过,所以内部是无序散列的,保证了高效率,也就是说,其输出不是按照开始加入的顺序,而Dictionary遍历输出的顺序,就是加入的顺序,这点与Hashtable不同。如果一定要排序HashTable输出,只能自己实现:

HashTable与线程安全

为了保证在多线程的情况下的线程同步访问安全,我们需要使用HashTable类:

这样如果有多个线程并发的企图写HashTable里面的 item, 则同一时刻只能有一个线程写其余阻塞对读的线程则不受影响。

 7. Stack

栈,后进先出。push方法入栈,pop方法出栈。

8.Queue

队列,先进先出。enqueue方法入队列,dequeue方法出队列。
 ---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ---------------------- 


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 联想预装的office卸载怎么办 win10激活后无法启动怎么办 移动电话卡没用了没注销怎么办 快捷快递客服热线一直打不通怎么办 牛奶乳加钙咀嚼片吃多了怎么办 三生骗了我该怎么办 国珍产品新时代卡怎么办 三个月大的宝宝对眼怎么办 9月大婴儿眼睛对眼怎么办 30岁眼部有皱纹怎么办 才24岁眼部皱纹怎么办 被双开后以前的养老保险怎么办 尚赫辟谷期间来月经怎么办 保险公司给代理人奖金迟发怎么办 比亚迪f3烧机油怎么办 支付宝刷脸认证老失败怎么办 融e借没密码器怎么办 融e购不显示积分怎么办 王者荣耀区满了怎么办 苹果4s储存不够怎么办 乐视2费电超级快怎么办 支付宝手机订单号查不到怎么办 淘宝几个订单同一个快递单号怎么办 工商银行u盾丢了怎么办 银行不让开u盾怎么办 手机u盾识别不了怎么办 绿森商城不退款怎么办 电信手机号码过户积分清零怎么办 被电话诈骗骗了怎么办 诈骗电话骗了钱怎么办 被网友骗了一千块钱怎么办 被网友骗了1000块怎么办 微信红包被骗100怎么办 3m投资钱要不回来怎么办 手机照片超过3m怎么办 小说大于3m看不了怎么办 携程订单删除了怎么办 绿叶会员密码忘了怎么办 账号对名错了怎么办 lv双肩包肩带短了怎么办 微信充q币被骗了怎么办