1.数组对象都是Array的子类,Array是一个抽象类,不能显示实例化,Array提供了大量操作数组的静态方法

2.ArrayList其实是内部封装了一个array,实现了IList的接口。add remove在内部还是调用array的方法。
于Array最大的区别是,ArrayList的长度是自管理的,Array的长度是固定的。

3.synclist本质上还是用lock操作icollect的syncroot System.Threading.Interlocked.CompareExchange<Object>(ref _syncRoot, new Object(), null);

4.arraylist提供了ilist的一些功能。为什么是在arraylist中提供呢?比如封装一个ReadOnly的list,封装一个FixedSize的list,封装一个Synchronized的list
也就是针对ilist的IsFixedSize和IsReadOnly还有icollection的IsReadOnly的属性,都提供了一个额外的类
但arraylist也针对自身封装了ReadOnly的arraylist,封装了FixedSize的arraylist和Synchronized的arraylist
arraylist还提供了一个list到arraylist的adapter功能

5.对于一个synchronized的arraylist,任何一个方法都是lock的,包括查询方法也是。
对于一个synchronized的ilist,任何一个方法都是lock的,包括查询方法也是。

6.对于一个FixedSize的arraylist,任何可能导致长度变化的方法都会抛出异常

7.List.GetRange返回的arraylist是原arralist的一部分,对该arraylist操作会影响到原arraylist

8.version每次在数据有变化的时候都会自增加一,这样在通过Enumerator遍历的时候进行核对。

9.IDictionary中的GetEnumerator是一个new接口,和IEnumerable不一样

10.DictionaryEntry是dictionary转换到array用的,array就是entry的数组,entry的key value是可读写的。
KeyValuePair是dictionary遍历用的。KeyValuePair的key value是只读的。

11.HashTable的本质也还是一个数组,不过数组对象是一个内部的bucket
HashTable的长度是预定定义好一些数字,然后根据算法从数字中找到一个合适的。

12.泛型List只是提供了synch的封装,没有对应的fixedsizelist和readonlylist

13.泛型stack queue linkedlist sortedlist sortedset storeddictionary都是属于sys的扩展

14.linkedlist是闭环的双向链表

15.SortedSet是用红黑树实现的,SortedDictionary是基于sortedset实现的

16.Dictionary的实现
int[] buckets, Entry[] entries
查找:根据key的hash算法得到一个index,取得buckets[index]的值,假设为bucketIndex,
如果bucketIndex不为空,检索entries[bucketIndex](根据key和hash判断)是否是所要查找对象,如果是则返回。
即是说,在不冲突的情况下,buckets存放的是真实的entry在entries中的索引!
如果冲突的话,根据entries[bucketIndex]的next得到下一个bucketIndex,再次检索,知道next的属性为零。
插入:创建一个entry保存数据然后存入到entries中,得到这个entry在entries中的索引entryIndex,
然后根据key的hash算法得到一个index,取得buckets[index]的值,假设为bucketIndex,
如果bucketIndex为空,则buckets[index]=entryIndex;
如果bucketIndex,不为空,则entry.next=bucketIndex; buckets[index]=entryIndex;
删除:链表的删除

本质上还是链表法处理hash冲突,一般的链表法是一个hash对应一个链表,而.net中是用唯一的一个entries数据处理所有的链表。非常巧妙!
插入了n个entry后,entries中一定有n个数据,但buckets中不一定存有n个数据,因为hash可能冲突,但buckets的数据个数一定是小于n的

.net collection tips的更多相关文章

  1. Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译

    本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...

  2. Unity优化方向——优化Unity游戏中的垃圾回收(译)

    介绍 当我们的游戏运行时,它使用内存来存储数据.当不再需要该数据时,存储该数据的内存将被释放,以便可以重用.垃圾是用来存储数据但不再使用的内存的术语.垃圾回收是该内存再次可用以进行重用的进程的名称. ...

  3. Simple Tips for Collection in Python

    I believe that the following Python code is really not hard to understand. But I think we should use ...

  4. Tips collection of iOS development

    <转>UITableView当数据很少的时候,去掉多余的cell分割线   在tableView初始化的时候 UIView *v = [[UIViewalloc] initWithFram ...

  5. android 官方文档 JNI TIPS

    文章地址  http://developer.android.com/training/articles/perf-jni.html JNI Tips JNI is the Java Native I ...

  6. Matlab tips and tricks

    matlab tips and tricks and ... page overview: I created this page as a vectorization helper but it g ...

  7. 【转】必需知道的 SharePoint 权限 Tips

    SharePoint Tips about Permissions: What you need to know         I have been writing tips about Shar ...

  8. 10个加速Table Views开发的Tips(转)

    本文由CocoaChina译者yake_099(博客)翻译,作者:David McGraw原文:10 Actionable Performance Tips To Speed Up Your Tabl ...

  9. Java Tips and Best practices to avoid NullPointerException

    A NullPointerException in Java application is best way to solve it and that is also key to write rob ...

随机推荐

  1. Asp.net WebApi 配置 Swagger UI

    首先安装Swashbuckle.Core 然后添加swagger配置文件. [assembly: PreApplicationStartMethod(typeof(SwaggerConfig), &q ...

  2. winform中的ListBox和ComboBox绑定数据

    将集合数据绑定到ListBox和ComboBox控件,界面上显示某个属性的内容 //... //自定义了Person类(有Name,Age,Heigth等属性) List<Person> ...

  3. enabled和priority属性

    本篇来继续学习@Test下的注释,这篇学习两个属性的基本使用.第一个是设置该条用例不被执行,第二个的作用是设置用例执行的优先顺序. 1. 属性enabled 在Testng中,如果方法前面添加了@Te ...

  4. Generator 函数的语法

    简介 § ⇧ 基本概念 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同.本章详细介绍 Generator 函数的语法和 API,它的异步编程应用请看< ...

  5. IIS和ASP.NET MVC 管道处理模型

    转载自  博客园 青羽 http://www.cnblogs.com/tenghoo/archive/2009/11/04/IIS_And_ASPNET_Http_Runtime_Pipeline.h ...

  6. JavaScript权威指南--词法结构

    使用广泛,所有的浏览器(桌面.手机.屏蔽等等)都配有相应的JavaScript解析器. JavaScript解析器如何工作? 浏览器在读取HTML文件的时候,只有当遇到<script>标签 ...

  7. mongodb复制集开启安全认证

    之前我有一篇博客写的是“node.js通过权限验证连接MongoDB”,这篇博客上提到如何在启动文件中通过配置auth参数来开启权限认证,但这种认证方式只适合单机节点,当我们使用复制集时应该怎么开启权 ...

  8. Ansible 小手册系列 七(Ad-hoc)

    Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook.前者可以解决一些简单的任务, 后者解决较复杂的任务. ad hoc——临时的,在ansible ...

  9. 【待填坑】ajax问题

    原生xhr怎么写? 怎么处理回调? 问:http状态码常见有哪些? 问:302是啥?304是啥?什么时候会返回304?你刚刚说浏览器缓存,具体缓存机制是怎么样的? 问:你刚刚说的是发起一个get请求, ...

  10. [转载]java实现word转pdf

    最近遇到一个项目需要把word 转成pdf,百度了一下网上的方案有很多,比如虚拟打印.给word 装扩展插件等,这些方案都依赖于ms word 程序,在java代码中也得使用诸如jacob或jcom这 ...