Hashtable, ArrayList, List, Dictionary学习
在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对.。
在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);
在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);
从哈希表中移除所有元素: HashtableObject.Clear();
判断哈希表是否包含特定键key: HashtableObject.Contains(key);
Hashtable ht = new Hashtable();
ht.Add("a", 123);
ht.Add("b", 456);
// 遍历哈希表需要用到DictionaryEntry Object
foreach (DictionaryEntry de in ht)
{
MessageBox.Show(de.Key.ToString() + " " + de.Value.ToString());
}
//对哈希表进行排序
ArrayList akeys = new ArrayList(ht.Keys); //别忘了导入System.Collections
akeys.Sort(); //按字母顺序进行排序
foreach (string skey in akeys)
{
MessageBox.Show(skey + ":");
MessageBox.Show(ht[skey].ToString());//排序后输出
}
ArrayList用法
private static void AddToList(ArrayList list, string p)
{
if (list.Contains(p) == false)
list.Add(p);
}
private void button1_Click(object sender, EventArgs e)
{
ArrayList list = new ArrayList();
AddToList(list, "Table1");
AddToList(list, "Table4");
AddToList(list, "Table1");
AddToList(list, "Table3");
AddToList(list, "Table2");
AddToList(list, "Table2");
foreach (string s in list)
{
MessageBox.Show(s);
}
}
List
List<string> listStr = new List<string>();
listStr.Add("123");
listStr.Add("456");
listStr.Add("789");
MessageBox.Show(listStr[2]);//”789”
Dictionary
泛型的优点(C# 编程指南)
C# 中典型的范型结构除了熟悉的 IList , HashTable之外还有一个并不常见的Dictionary集合。
相比较而言,Dictionary的性能是最好的,也属于轻便型的集合。效率要大于HashTable,其主要原因是Dictionary支持强类型声明的。
在公共语言运行库和 C# 语言的早期版本中,通用化是通过在类型与通用基类型 Object 之间进行强制转换来实现的,泛型提供了针对这种限制的解决方案。通过创建泛型类,您可以创建一个在编译时类型安全的集合。
添加到 ArrayList 中的任何引用或值类型都将隐式地向上强制转换为 Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。
对于客户端代码,与 ArrayList 相比,使用 List<T> 时添加的唯一语法是声明和实例化中的类型参数。虽然这稍微增加了些编码的复杂性,但好处是您可以创建一个比 ArrayList 更安全并且速度更快的列表,特别适用于列表项是值类型的情况。
Dictionary 泛型类提供了从一组键到一组值的映射。字典中的每个添加项都由一个值及其相关联的键组成。通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictionary 类是作为一个哈希表来实现的。
1、
Dictionary<int, string> fruit = new Dictionary<int, string>();
//加入重复键会引发异常
fruit.Add(1, "苹果");
fruit.Add(2, "桔子");
fruit.Add(3, "香蕉");
fruit.Add(4, "菠萝");
//因为引入了泛型,所以键取出后不需要进行Object到int的转换,值的集合也一样
foreach (int i in fruit.Keys)
{
MessageBox.Show("键是:"+i.ToString()+ "值是:"+ fruit);
}
2、
Dictionary<string , string> fruit = new Dictionary<string, string>();
//加入重复键会引发异常
fruit.Add("1", "苹果");
fruit.Add("2", "桔子");
fruit.Add("3", "香蕉");
fruit.Add("4", "菠萝");
//因为引入了泛型,所以键取出后不需要进行Object到int的转换,值的集合也一样
foreach (string i in fruit.Keys)
{
MessageBox.Show("键是:"+i.ToString()+ "值是:"+ fruit);
}
转载于:https://www.cnblogs.com/silverLee/archive/2009/11/05/1596778.html
Hashtable, ArrayList, List, Dictionary学习相关推荐
- 以ArrayList为例学习序列化和反序列化
一.序列化和反序列化: 在进行对象操作类的实现时,涉及到好几个关键词Serializable和transient 什么是序列化和反序列化? 序列化:将对象转化为字节的过程称为序列化过程 (存储到本地磁 ...
- 接口,常用接口,列表ArrayList,泛型,Dictionary(字典),Dictionary版-火星文翻译器,其他集合类...
接口 接口相当于没有方法实现的抽象类. public interface Flyable { void Flay(); } 接口方法不要public.(为什么不能用private,public,因为如 ...
- OAF_开发系列17_实现OAF数组应用Vector / Hashmap / Hashtable / Arraylist(案例)
20150506 Created By BaoXinjian 一.摘要 Vector.ArrayList和Hashtable Jashmap的异同 线性表,链表,哈希表是常用的数据结构,在进行Java ...
- Javascript模拟c#中arraylist操作(学习分享)
最近在看javascript,在<javascript高级编程>中也学到了不少东西.但是在这里要感谢博客园的"汤姆大叔" 的无私奉献,他的关于javascript相关博 ...
- 集合框架-ArrayList源码学习
MIT麻省理工学院讲义上的一段话: 如果没有完全理解 JAVA 库中的具有决定性的部分,你就不可能成为一个优秀的 JAVA 程序员.基本类型都包含在 java.lang 中.java.util包提供了 ...
- 基于API的ArrayList集合之学习记录
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.arraylist集合的出现 对象数组的使用 对象数组的缺点 为了弥补对象数组的缺点,出现了arraylist集合 二. ...
- ArrayList源码学习
可增长数组结构 实现: 1. 内部采用数组的方式. 1.1 添加元素,会每次校验容量是否满足, 扩容规则是当前数组长度+当前数组长度的二分之一.容量上限是Integer.MAX_VALUE. copy ...
- ArrayList源码学习第二天全解
目录 1,删除元素 1.1,删除单个元素remove 1.2, 移除多个元素removeRange 1.3,移除在 c 中的元素batchRemove 4,移除不在 c 中的元素retainAll 2 ...
- Java(ArrayList和LinkedList)、(HashTable与HashMap)、(HashMap、Hashtable、LinkedHashMap和TreeMap比较)
1.ArrayList和LinkedList (1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. (2)对于随机访问get和set,ArrayList绝 ...
最新文章
- 收集一些好的技术文档
- 不可错过的javascript迷你库
- Qt C++属性类型提供给 QML调用(四)
- paypal创建订单后怎么获得id_PayPal开放加密数字货币买卖 2021年将支持2600万家商户购物...
- 毕业十年,你的收入是怎样的?
- try except 异常捕获的方法、断言的使用
- 【leetcode】538. Convert BST to Greater Tree
- Vue项目中使用eslint的笔录,编辑器采用sublime3
- 新疆财大计算机科学,新疆财经大学计算机科学与工程学院学生参加了多项专业赛事...
- java hd sex_Java学习笔记(十八)——Java DTO
- Android音视频开发之如何合并音频和视频文件?
- mac虚拟机parallels装Ubuntu无法联网
- ActiveX是什么?界面开发有哪些好用的ActiveX控件推荐?
- Python从入门到PY交易,基础语法,散记(一)
- vue 前端仿QQ截图实现Web端自定义截屏(JS版)
- 解决 git 文件夹不显示绿色图标和红色图标的问题
- oracle逗号隔开行转列_oralce逗号分割变多行-Oracle
- 关于TPC协议知识汇总
- javaScript解决浏览器兼容问题,判断浏览器是ie或者Chrome
- 凯撒密码C语言用ASCII码,凯撒密码帮助ASCII循环
热门文章
- 李彦宏最新演讲:移动互联网的时代已经结束了
- 第十三章:Python の 网络编程进阶(二)
- 第十天-linux命令及基础手把手实战
- Central Europe Regional Contest 2012 Problem c: Chemist’s vows
- [Swift]LeetCode811. 子域名访问计数 | Subdomain Visit Count
- 不同数据库间的数据访问--dblink
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--L-用来作弊的药水
- python入门(1)python的前景
- 五、线程管理————GCD
- Android编译系统入门(二)