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. 基于Redis的限流系统的设计

    本文讲述基于Redis的限流系统的设计,主要会谈及限流系统中限流策略这个功能的设计:在实现方面,算法使用的是令牌桶算法来,访问Redis使用lua脚本.   1.概念 In computer netw ...

  2. finally是否执行?finally何时执行?

    一.finally是否执行: 1.只有与 finally 相对应的 try 语句块得到执行的情况下,finally 语句块才会执行当finally 相对应的 try 语句块之前,已经抛出错误,或者已经 ...

  3. 用svg实现不规则形状

    像这种弧形,用纯html和css很难写,但是用svg就简单多了. 可以用作图工具画出一个弧形,然后导成svg格式.在页面中,下面的白块就是div+svg构成 mixin svgCard(...cont ...

  4. js实现类名的添加与移除

    方法1:使用className属性: 方法2:使用classList API: //用于匹配类名存在与否 function reg(name){ return new RegExp('(^|\\s)' ...

  5. activiti如何让业务对象和对应的流程关联

    如何让业务对象和对应的流程 关联? 发现ProcessInstance 有个方法getBusinessKey()可以得到一个businessKey. ProcessInstance 对应数据库中的表a ...

  6. 【Demo】jQuery 表格内容动态排序

    实现功能: 通过点击表头某个字段,实现内容的升序或降序排序. 效果如下: 完整代码: <!DOCTYPE html> <html> <head> <meta ...

  7. Codeforces Round #424

    基本全是水题 第一题水,不过有hack点,先增后不变再减 #include<map> #include<set> #include<cmath> #include& ...

  8. canvas图形的组合与裁切

    当两个或两个以上的图形存在重叠区域时,默认情况下一个图形画在前一个图像之上.通过指定图像globalCompositeOperation属性的值可以改变图形的绘制顺序或绘制方式,globalAlpha ...

  9. clientWidth、offsetWidth等介绍

    网页可见区域宽:document.body.clientWidth网页可见区域高:document.body.clientHeight网页可见区域宽:document.body.offsetWidth ...

  10. spring配置bean的生命周期

    配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...