C#中集合ArrayList与Hashtable的使用

http://blog.csdn.net/linukey/article/details/42506819

ArrayList:

一.

注意事项:

1.可以指定ArrayList集合的初始大小

var list = new ArrayList(10);//容纳10个元素

若不指定大小,则默认大小为0,添加一个后为4,然后以倍数递增。

2.ArrayList是Array的复杂版本,ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。

3.内部的Object类型的影响 : 对于一般的引用类型来说,这部分的影响不是很大,但是对于值类型来说,往ArrayList里面添加和修改元素,都会引起装箱和拆箱的操作,频繁的操作可能会影响一部分效率。此时应该用泛型类替代ArrayList。

4.数组扩容 :这是对ArrayList效率影响比较大的一个因素。  每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果不够,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。

5.频繁的调用IndexOf、Contains等方法(Sort、BinarySearch等方法经过优化,不在此列)引起的效率损失,首先,我们要明确一点,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法,所以实际上调用IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来的快,如果有这方面的要求,建议使用Hashtable或SortedList等键值对的集合。

二:

属性及方法

属性:

1.Count:目前ArrayList包含的元素的数量,这个属性是只读的。

2.Capacity:目前ArrayList能够包含的最大数量,可以手动的设置 这个属性,但是当设置为小于Count值的时候会引发一个异常。

方法:

1.Int Add(object value);

用于添加一个元素到当前列表的末尾。

2.Int AddRange(object value);

用于添加一个集合或数组到当前列表的末尾。

3.void Remove(object obj);

用于删除一个元素,通过元素本身的引用来删除。

4.void RemoveAt(int index);

用于删除一个元素,通过索引值来删除。

5.void RemoveRange(int index, int count);

用于删除一个集合或数组,通过指定开始的索引和删除的数量来删除。

6.void Insert(int index, object value)

用于添加一个元素到制定位置,列表后面的元素依次往后移动。

7.void InsetRange(int index, Icollection collec)

用于从指定位置添加一个集合或数组

8.void Sort()

对集合中的元素进行排序

9.void Reverse();

将ArrayList或它的一vufenzhong元素的顺序反转

10. Int IndexOf(object);

Int IndexOf(object, int);

Int IndexOf(object, int, int);

返回ArrayList或它的一部分中某个值的第一个匹配项的从零开始的索引。没有找到返回-1。

11.Int LastIndexOf(object)

Int LastIndexOf(object, int)

Int LastIndexOf(object, int, int)

返回ArrayList或它的一部分中某个值得最后一个匹配项的从零开始的索引。没找到返回-1

12.void TrimSize()

用于将ArrayList固定到实际元素的大小,当动态数组元素确定不再添加的时候,可以调用这个方法来释放空余的内存

13.void Clear()

清空ArrayList中的所有元素

14.Array ToArray()

这个方法把ArrayList中的元素copy到一个新的数组中

Hashtable

常用方法:

1.在哈希表中添加一个keyvalue键值对:HashtableObject.Add(key,value);

2.在哈希表中去除某个keyvalue键值对:HashtableObject.Remove(key);

3.从哈希表中移除所有元素:          HashtableObject.Clear();

4.判断哈希表是否包含特定键key:     HashtableObject.Contains(key);

C#中集合ArrayList与Hashtable的使用的更多相关文章

  1. 第三章泛型集合ArrayList 和Hashtable

    第三章泛型集集合 ArrayList 变量名 = new ArrayList();  //相当与一个容器 他的执行using 是  using System.Collections; 变量名.ADD( ...

  2. c#重点[集合类型]异常,数组,集合ArrayList,List<>,hashTable,hashtable泛型(Dictionary)

    1.foreach[对一些数组或集合进行遍历] foreach(类型 变量名 in 集合对象){语句体} //定义一个数组 ,,,,, }; foreach(var i in sNum1) { Con ...

  3. Java中list集合ArrayList 中contains包含的使用

    Java中list集合ArrayList 中contains包含的使用 https://blog.csdn.net/qq_38556611/article/details/78774690

  4. Java基础系列 - JAVA集合ArrayList,Vector,HashMap,HashTable等使用

    package com.test4; import java.util.*; /** * JAVA集合ArrayList,Vector,HashMap,HashTable等使用 */ public c ...

  5. 集合 ArrayList 类

    集合的基本信息: System.Collections   系统类中的收藏类,定义各种对象(如列表,队列,位数组,哈希表和字典)的集合 常用的集合为ArrayList类:特殊集合一般会用到Queue队 ...

  6. ArrayList、HashTable、List、Dictionary的演化及如何选择使用

    在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求. 由于这种限制不方便,所以出现了ArrayList. ArrayList.List<T> ArrayList是可变长数组,你 ...

  7. Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  8. 类 Array Arraylist List Hashtable Dictionary

    总结C# 集合类 Array Arraylist List Hashtable Dictionary Stack Queue  我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashT ...

  9. Java中集合的概述

    一.集合和数组的区别 1.数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 2.集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数 ...

随机推荐

  1. 032 搭建搜索微服务01----向ElasticSearch中导入数据--通过Feign实现微服务之间的相互调用

    1.创建搜索服务 创建module: Pom文件: <?xml version="1.0" encoding="UTF-8"?> <proje ...

  2. 使用Clion优雅的完全远程自动同步和远程调试c++

    摘要:在linux上用vim写C++的时候,通常用gdb进行调试,不能随心所欲的看代码和跳转代码以及加watch(也有可能是因为我还没有get正确的使用方法).为此我发现Clion可以做到自动同步本场 ...

  3. 关于C语言指针的讨论

    C语言指针的讨论 1.指整的概念辨析 2.指针与一维数组 3.指针与二维数组 4.指针与动态数组 5.指针数组 6. 指整与函数,形参,返回值 先熟悉一下概念,使劲把他们记下了 变量定义 类型表示 含 ...

  4. python装饰器的使用场景(转)

    原文:https://www.cnblogs.com/wupeiqi/articles/4980620.html 1.必备 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #### ...

  5. 【题解】子序列个数 [51nod1202] [FZU2129]

    [题解]子序列个数 [51nod1202] [FZU2129] 传送门:子序列个数 \([51nod1202]\) \([FZU2129]\) [题目描述] 对于给出长度为 \(n\) 的一个序列 \ ...

  6. SocketChannel简述

    前言 在前面的Channel概述的分类中提到过SocketChannel主要是用来基于TCP通信的通道.这篇文章详细介绍下SocketChannel SocketChannel是什么 SocketCh ...

  7. 【WPF】1、 基本控件的简介

    WPF一直都是断断续续的使用.偶尔用到一下.但是每次间隔比较长,需要重新学习,就写了这篇日志.以后有问题,看这个就可以了解各大概,然后针对细节再另外想办法. 微软的东西真心好,如果什么都不懂,可以直接 ...

  8. 2、Vue构造器和扩展

    1.VUE构造器简介 VUE构造器是一个非常重要的语法. 每个Vue.js应用都是通过构造函数Vue创建一个根实例. New了Vue对象,然后调用了这个vue对象的构造器,并向构造器传入了数据. 在实 ...

  9. dotnet core系列之Background tasks with hosted services (后台任务)

    这篇简单讲asp.net core 中的后台任务 用到的包: Microsoft.AspNetCore.App metapackage 或者加入 Microsoft.Extensions.Hostin ...

  10. 前端开发常用 JS 方法

    1,获取文件本地url,在上传之前预览 /** * 获取图片嗯滴url,在上传之前预览 * @param file 选择的图片文件 * @returns {*} url */ getFileLocat ...