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. springMVC注解的参数传递

    1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...

  2. Shell脚本 curl获取必应每日壁纸(Mac OS)

    Mac上Safari不能下载壁纸,遇到好看的很想用作壁纸.写了一小段脚本用来拉取网页图片. curl: -sS 参数用来取消下载状态显示 grep 首先把含有图片网址的行提取了出来,针对这一行再做se ...

  3. [小问题笔记(十)] SQL Server 里 float 转 varchar等字符类型 不使用科学计数法

    需要转换两次, 试了一下 float 转 bigint 转 varchar 溢出了... 后来用  float 转 decimal(38,0) 转 varchar 就成功了~ ,)) )) 另吐槽一下 ...

  4. 用maven按环境打包SpringBoot的不同配置文件

    利用maven按环境打包SpringBoot的不同配置文件 application-dev.properties对应开发环境 application-test.properties对应测试环境 app ...

  5. go-ipfs入门及介绍

    1.go-ipfs安装 参考: https://mp.weixin.qq.com/s?__biz=MzUwOTE3NjY3Mw==&mid=2247483734&idx=1&s ...

  6. Class 的继承

    简介 Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多. class Point { } class ColorPoint extends P ...

  7. i++为什么是线程不安全的

    主要是因为i++这个操作不是原子性的,它会编译成 i = i +1: 其实是做了3个步骤,一个是读取,修改,写入 .所以会出现多线程访问冲突问题. 可以结合Java内存模型来进行说明.

  8. 关于SpringMVC中两种映射器不能共存的解决

    首先大家都知道SpringMVC有两种映射器: org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping 和 org.spri ...

  9. Java输出double类型中的最小正数和最大正数

    这是<写给大忙人看的java核心技术>中的一道练习题. 1. 输出最大正数值 System.out.println(Double.MAX_VALUE); 直接输出包装类Double的MAX ...

  10. IOS-H5容器的一些探究:UIWebView和WKWebView的比较和选择

    一.Native开发中为什么需要H5容器 Native开发原生应用是手机操作系统厂商(目前主要是苹果的iOS和google的Android)对外界提供的标准化的开发模式,他们对于native开发提供了 ...