.net collection tips
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的更多相关文章
- Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译
本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...
- Unity优化方向——优化Unity游戏中的垃圾回收(译)
介绍 当我们的游戏运行时,它使用内存来存储数据.当不再需要该数据时,存储该数据的内存将被释放,以便可以重用.垃圾是用来存储数据但不再使用的内存的术语.垃圾回收是该内存再次可用以进行重用的进程的名称. ...
- 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 ...
- Tips collection of iOS development
<转>UITableView当数据很少的时候,去掉多余的cell分割线 在tableView初始化的时候 UIView *v = [[UIViewalloc] initWithFram ...
- android 官方文档 JNI TIPS
文章地址 http://developer.android.com/training/articles/perf-jni.html JNI Tips JNI is the Java Native I ...
- Matlab tips and tricks
matlab tips and tricks and ... page overview: I created this page as a vectorization helper but it g ...
- 【转】必需知道的 SharePoint 权限 Tips
SharePoint Tips about Permissions: What you need to know I have been writing tips about Shar ...
- 10个加速Table Views开发的Tips(转)
本文由CocoaChina译者yake_099(博客)翻译,作者:David McGraw原文:10 Actionable Performance Tips To Speed Up Your Tabl ...
- 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 ...
随机推荐
- [异常记录(二)] 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
错误提示: 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 Au ...
- [小问题笔记(八)] 常用SQL(读字段名,改字段名,打印影响行数,添加默认值,查找存储过程等)
读取所有字段,自然排序 declare @fields varchar(max) Select @fields=ISNULL(@fields,'')++name+',' from syscolumns ...
- 机器学习笔记—K-均值聚类
在聚类问题中,给定训练集 {x(1),...,x(m)},要把数据分成内聚的“簇”.这里 x(i)∈R,没有 y(i).所以,这是一个无监督学习问题. k-均值聚类算法如下: 1.随机初始化簇中心 μ ...
- 使用iview--1
在任意一个你想创建项目的路径下 每次输入就输一致的就可以 /*************************安装选项开始****************/ 回车再次回车就如下,输入Y 继续 回车,输 ...
- Centos7 安装Power Shell
Centos7 安装Power Shell 1 查看版本 # cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 2 安装 # R ...
- 解决msi文件在XP上安装未完成
下载Ocra工具,然后删除"DIRCA_CheckFx"和"VSDCA_VsdLaunchConditions"这两个Action即可.第一步,下载并打开Ocr ...
- 【Python】模块学习之(__call__)实现准确计算函数运行时间
背景 博主在写自动化的过程中,有遇到有的用例运行缓慢的问题,想起在上一家公司的的“自动化工厂”有一个指标:两小时内运行完所有的用例才算合格.所以想计算每一个用例的运行时间. 思路 因为使用的POM模型 ...
- spring mvc: 注解和JavaConfig实例
通过javaConfig来配置config,并能正常访问url. 先看图 访问地址:http://localhost:8080/gugua5/ http://localhost:8080/gugua5 ...
- poj1113凸包
就是求凸包的周长加以l为半径的圆周长,证明略 由于之前写过叉积,所以graham扫描算法不是很难理解 #include<map> #include<set> #include& ...
- 13.LockSupport工具
1. LockSupport简介 在之前介绍AQS的底层实现,已经在介绍java中的Lock时,比如ReentrantLock,ReentReadWriteLocks,已经在介绍线程间等待/通知机制使 ...