zoukankan      html  css  js  c++  java
  • 浅析几种数据集合(Dictionary、ArrayList、Hashtable和Array)的区别

    数组 Array

    数组是固定大小的,不能伸缩,要声明元素的类型。

    数组可读可写不能声明只读数组;数组要有整数下标才能访问特定的元素

    (强类型约束)

    ArrayList:

    数组的复杂版本,动态数组类型

    数组可以多维,ArrayList只能是一维的,数组固定长度,ArrayList长度动态调整

    ArrayList可以存储任意类型,因为它的元素属于object类型,但是由此带来的装箱拆箱会影响性能

    方法

      1:Add()向数组中添加一个元素,

     2:Remove()删除数组中的一个元素

     3:RemoveAt(int i)删除数组中索引值为i的元素 

     4:Reverse()反转数组的元素 

     5:Sort()以从小到大的顺序排列数组的元素

     6:Clone()复制一个数组

    使用:

    ArrayList List = new ArrayList();
    for( int i=0;i<10;i++ ) //给数组增加10个Int元素
    List.Add(i); 
    //..程序做一些处理
    List.RemoveAt(5);//将第6个元素移除
    for( int i=0;i<3;i++ ) //再增加3个元素
       List.Add(i+20);
    Int32[] values = (Int32[])List.ToArray(typeof(Int32));//返回ArrayList包含的数组

    List<> 泛型:

    可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法 

    泛型是强类型集合,所以是类型安全的,并且类型限制,使得避免了装箱拆箱操作,是性能提高

    Hashtable(using System.collections)哈希表:

    HashTable中的key/value均为object类型,所以HashTable可以支持任何类型的key/value键/值对。其中key必须是唯一的,没有有效的排序。提供快速查询;元素的存储于顺序无关(与Dictionary不同)

    哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。 

    应用场景:某些数据高频率的查询;大数据量;查询的字段数据类型不是整型、浮点型而是字符串类型

    用法:

    Hashtable ht = new Hashtable

    ht.Add("key1","value1");

    ht.Add("key1","value2");

    ht.Contsins("key1");//判断key1键是否存在

    ht.Contsinkey("key1")//同上

    foreach(Object key in ht.Keys) //遍历key

    {}

    foreach(Object value in ht.Values)//遍历value

    {}

    foreach(DicrionaryEntry de in ht) //同时遍历键/值对,与dictionary相同

    {

            Console.WriteLine(de.Key);

            Console.WriteLine(de.Value);

    }

    ht.Remove("key1");//移除key1键元素

    ht.Clear();//清除所有元素

    .HashSet

      HashSet<T>类主要是设计用来做高性能集运算的,例如对两个集合求交集、并集、差集等。集合中包含一组不重复出现且无特性顺序的元素,HashSet拒绝接受重复的对象

      HashSet<T>的一些特性如下:

      a. HashSet<T>中的值不能重复且没有顺序。

      b. HashSet<T>的容量会按需自动添加。

    Dictionary(using System.Collections.Generic):

    大规模写数据比hashtable快,二者的使用方法差不多,遍历Dictionary的输出是按照输入的顺序来输出。

    单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分。多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减。

  • 相关阅读:
    hive -- 协同过滤sql语句
    Hive
    hive的排序,分組练习
    Hive 外部表的练习(多表关联查询,以及分组,子查询)
    javascript高级程序编程-学习笔记(基础)
    nodejs-基础与深入
    4.npm模块安装和使用(axios异步请求,lodash工具库)
    node-xlsx
    Git在tortoiseGit以及eclipse的使用方法
    稻盛和夫----六项精进
  • 原文地址:https://www.cnblogs.com/wanglao/p/3599878.html
Copyright © 2011-2022 走看看