刚刚开始学习C# 看了两天语法的东西 ,了解了十之八九,还有很多东西想要知道,Collection方面就是其中之一,之后还有很多问题,希望大家能够帮助。问题如下:
比较常用的Collection有哪些?
我现在看了
ArrayList
List<>
SortedList
Hashtable
Dictionary<>1 请问大家平时用到比较多的还有哪些? 他们都有些什么继承关系(父接口 事先等等的关系表)  或者给我一个类似的关系图链接就好
2 关于Hastable  Dictionary SortedList等 我使用Add方法的时候都不能插入键值相同的数据,之后我只能用 var[key]=xxxx来实现这种操作,请问是否有别的方法?我想做的就是往容器插入多组数据,遇到key相同的情况,自动覆盖掉先前的那组数据。
3 2中提到的那些容器,当我想用null作为key的时候 应该怎么做? 有没有哪个容器可以接受null作为key? 
4 我要实现集合操作应该选择哪个容器? 就是说我有一组数据,但是其中有些是重复的,我希望放入一个容器,只保留不重复的
5 对于容器的Contains仿佛进行判断是否有该元素的时候,是否只要定义操作符== 的返回值为true,就认为含有该元素呢?
6 这些容器是否是线程安全的?暂时就这些问题吧  谢谢大家了

解决方案 »

  1.   

    1 请问大家平时用到比较多的还有哪些? 他们都有些什么继承关系(父接口 事先等等的关系表)  或者给我一个类似的关系图链接就好
    --------------------------------------------------------------Queue
    Queue<T>
    Stack
    Stack<T> 
    LinkedList<T>其中Queue 和Queue<T> 在我们的程序中用的比较多些
      

  2.   

    我想做的就是往容器插入多组数据,遇到key相同的情况,自动覆盖掉先前的那组数据。
    _______________________________________________________________________________直接用myList[key]=value 就行.
      

  3.   

    我想做的就是往容器插入多组数据,遇到key相同的情况,自动覆盖掉先前的那组数据。
    _______________________________________________________________________________直接用myList[key]=value 就行.
    _______________________________________________________________________________我指不要key的情况
    比如我有一个int[] intArray={1,1,2,2,2,2,2,2,3,4};
    我必须用key value的方式来做吗?
    能不能存在某个容器XX
    xx.AddRange(intArray) 往里面放入{1,3,3,4}
      

  4.   

    1、要熟悉数据结构
    2、用封装Add的方法来解决
    3、没有试过
    4、根据需求选择,当然要加入自己的业务逻辑,不会什么都是现成的。
    5、可以看看MSDN中的Contains
    6、容器线程安全,但不能保证里面的数据是否线程安全
      

  5.   

    自己经过反复测试试验 有了一点答案
    关于5 ArrayList等的Contains 方法只对对象的Equals方法进行比较来判断
    而对于Hashtable之类的key 是通过Equals GetHashCode两方面进行比较来进行key的比对
    所有的一切都和==操作符无关
      

  6.   

    to setdefault(山转水也转) :
    关于6 你说的不能保证里面的数据是否线程安全是什么意思?
    我的意思是容器的线程安全指一个线程访问的开始到结束,不会因为另外一个线程对此容器的操作而导致数据内容不正常
      

  7.   

    6 这些容器是否是线程安全的?
    _______________________________不保证线程安全. 当你从不同的线程上对它们同时读和写的时候,必须自己做线程同步保护,最简单的方法是用lock.另外Hatshtable有一个Hashtable.Synchronized 可以返回号称线程安全的Hatshtable,但它只是保证多线程只读或只写安全,并不保证多线程同时读写的安全.所以我的经验是不用Hashtable.Synchronized ,自己加lock保护.还有,在对所有容器做foreach操作时,不是线程安全的,必须把整个foreach过程锁住
      

  8.   

    我指不要key的情况
    比如我有一个int[] intArray={1,1,2,2,2,2,2,2,3,4};
    我必须用key value的方式来做吗?
    能不能存在某个容器XX
    xx.AddRange(intArray) 往里面放入{1,3,3,4}
    ___________________________________________________没有一个现成的容器实现此功能,需要自己包装一下.你如果不要key,最好去包装ArrayList,去Override它的AddRange 方法.