数组 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 语句进行保护, 效率大减。

转载于:https://www.cnblogs.com/wanglao/p/3599878.html

浅析几种数据集合(Dictionary、ArrayList、Hashtable和Array)的区别相关推荐

  1. C#集合类(HashTable, Dictionary, ArrayList)与HashTable线程安全

    HashTable中的key/value均为object类型,由包含集合元素的存储桶组成.存储桶是 HashTable中各元素的虚拟子组,与大多数集合中进行的搜索和检索相比,存储桶可令搜索和检索更为便 ...

  2. C#集合类(HashTable, Dictionary, ArrayList,List)与HashTable线程安全

    HashTable中的key/value均为object类型,由包含集合元素的存储桶组成.存储桶是 HashTable中各元素的虚拟子组,与大多数集合中进行的搜索和检索相比,存储桶可令搜索和检索更为便 ...

  3. c#中Dictionary、ArrayList、Hashtable和数组 Array 的区别(转)

    C# 集合类 Array Arraylist List Hashtable Dictionary Stack Queue 1.数组是固定大小的,不能伸缩.虽然System.Array.Resize这个 ...

  4. Redis源码-Set:Redis Set存储原理、Redis Set集合操作命令、Redis Set两种存储底层编码intset+hashtable、Redis Set应用场景

    Redis源码-Set:Redis Set存储原理.Redis Set集合操作命令.Redis Set两种存储底层编码intset+hashtable.Redis Set应用场景 Redis数据类型 ...

  5. Java集合篇:Hashtable原理详解(JDK1.8)

    (本文使用的源码基于JDK1.8的) 一.Hashtable的基本方法: 这部分参考博客:https://blog.csdn.net/chenssy/article/details/22896871 ...

  6. arraylist转int数组_深度剖析Java集合之ArrayList

    一. ArrayList 初识 ArrayList是集合的一种实现,实现了接口List,List接口继承了Collection接口. ArrayList 是java 中最常用的集合类型,这是因为它使用 ...

  7. java常见数据集合分析

    文章目录 1. hashmap 2. hashset 3. HashTable 3. ArrayList 4. Vector & Stack 5. collection 1. hashmap ...

  8. 1.3 List集合:ArrayList和LinkedList类的用法及区别

    List集合: List 是一个有序.可重复的集合,集合中每个元素都有其对应的顺序索引. List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素. List 集合默认按元素的添加顺序设置 ...

  9. Java集合之ArrayList

    ArrayList ArrayList是最常见以及每个Java开发者最熟悉的集合类了,顾名思义,ArrayList就是一个以数组形式实现的集合,以一张表格来看一下ArrayList里面有哪些基本的元素 ...

最新文章

  1. 《MacTalk·人生元编程》
  2. 抓不到娃娃?不能总怪运气差!
  3. windows 8 安装iis .net 3.5
  4. “90后梗王”袁隆平:我啊?Handsome!
  5. 【数据库系统】SQL视图与表的区别和联系
  6. 埃夫特机器人示教器keba_埃夫特下一代智能工业机器人研发及产业化项目奠基...
  7. AbstractSyntax Tree (AST)
  8. 后台业务管理系统原型模板/在线教育后台管理系统/客服系统/财务管理/用户管理/订单管理/教育业务后台管理/课程管理/教师管理/活动管理/文章管理/Axure高保真在线教育行业原型/Axure后台管理
  9. RAID卡的安装配置
  10. Django-分页、中间件和请求的声明周期
  11. 与Intel一较高下:个人纯手工打造CPU
  12. 打印机服务器没有响应是怎么回事啊,打印机后台程序没有运行?(打印机后台服务无法启动怎么办?)...
  13. 百度统计后台页面点击图提示无法建立连接
  14. tomcat映射本地磁盘路径
  15. java SteamAPI练习(流的创建、流的操作、流的终止)
  16. 微信另外一种分享(图片 + 文字) 到朋友圈
  17. FullCalendar-vue demo例子
  18. 区间dp入门——总结+习题+解析
  19. day68 Django--中间件
  20. 集成显卡 独立显卡 CPU核心显卡的区别

热门文章

  1. 清华大学计算机网络体系结构,清华大学计算机网络体系结构讲义ch32(OSPF).pdf
  2. struts2编辑框中自动填充已经有的列表对应的值
  3. angularJs解决跨域问题-最简单的完美实例
  4. C# 执行文件的根目录 (转)
  5. XBug:一个强大的JavaScript调试器
  6. 利用Jsoup解析HTML
  7. CSS Grid中的陷阱和绊脚石
  8. php网页登录制作,thinkphp5 系统登录的实现
  9. Tensorflow API + OpenCV (Real Time Object Detection)
  10. VS2019下安装NumCpp库小结