HashTable Queue Stack SortedList BitArray
HashTable
由于是非泛型集合,因此存储进去的都是object类型,不管是键还是值。
Hashtable不允许排序 key不允许重复 键不允许为null
Queue和Queue<T>
Queue成为队列,队列是这样一种数据结构,数据有列表的一端插入,并由列表的另一端移除。就像单行道,只能从一段进,从一端出。Queue类实现了ICollection和IEnumerable接口。
1、先进先出
2、可以添加null值到集合中
3、允许集合中的元素重复
4、Queue容量会按需自动添加
5、Queue的等比因子是当需要更大容量时当前容量要乘以的数字,默认是2.0。
Queue q = new Queue();
q.Enqueue(1);//添加记录
q.Enqueue("helloword!");
q.Enqueue(1.23);
Console.WriteLine(q.Peek()); //输出1 获取值但不移除,与出列不同 返回位于Queue开始出的对象,但不将其移除,与出列不同,出列是会移除的
int Count = q.Count; //出队的时候q.Count在变化,因此q.Count放在循环条件里是不妥的
for (int i = 0; i < Count; i++)
{
Console.WriteLine(q.Dequeue().ToString()); //注意 输出 1 想家了 1.23 都是从最先添加的先拿
}
Console.WriteLine(q.Count); //输出0 出列一次,就自动移除了。
Queue<int> qInt = new Queue<int>();
qInt.Enqueue(1);
qInt.Enqueue(2);
qInt.Enqueue(3);
Console.WriteLine(qInt.Peek()); //输出1
int IntCount = qInt.Count;
for (int i = 0; i < IntCount; i++)
{
Console.WriteLine(qInt.Dequeue()); //注意 输出 123 都是从最先添加的先拿
}
Console.WriteLine(q.Count); //输出0 出列一次,就自动移除了。
Stack
添加和移除都在一端进行 后进先出
1、后进先出。
2、可以添加null值到集合中。
3、允许集合中的元素重复。
4、Stack的容量会按需自动增加。
Stack s = new Stack();
s.Push(1);//添加
s.Push("helloword!");
s.Push(1.23);
Console.WriteLine(s.Peek()); //输出1.23 返回位于Stack顶部的对象,但不移除,注意出栈是移除的。它不移除仅仅返回。
int Count = s.Count; //差点犯了逻辑错误,在for里面如果是s.Count的话,很容易乱,因为出栈操作s.Count是在变动着的。
for (int i = 0; i < Count; i++)
{
Console.WriteLine(s.Pop()); //输出 1.23 想回家了 1 移除并返回Stack顶部的对象 出栈
}
Console.WriteLine(s.Count); //输出0
Stack<int> sInt = new Stack<int>();
sInt.Push(1);
sInt.Push(2);
sInt.Push(3);
Console.WriteLine(sInt.Peek()); //输出3
int IntCount = sInt.Count; //差点犯了逻辑错误,在for里面如果是s.Count的话,很容易乱,因为出栈操作s.Count是在变动着的。
for (int i = 0; i < IntCount; i++)
{
Console.WriteLine(sInt.Pop()); //输出 3 2 1
}
Console.WriteLine(sInt.Count); //输出0
SortedList与SortedList<T>
SortedList类实现了IDictionary、ICollection以及IEnumerable接口 键/值 键和索引 访问
键的排序
在SortedList中,键和值分别保存在一个数组中,当向Sorted添加一个元素时,SortedList类添加一个元素时,SortedList会首先对key进行排序,然后根据排序结果计算出要插入到集合中的位置索引,再分别将key和value插
入到各自数组的指定索引位置。当使用foreach循环集合中的元素时,SortedList会将相同索引位置的key和value放进一个DictionaryEntry类型的对象,然后返回。
SortedList SL = new SortedList();
SL.Add("txt","txt"); //Add的时候会自动排序
SL.Add("jpg","jpg");
SL.Add("png","png");
foreach (DictionaryEntry de in SL) //返回的是DictionaryEntry对象
{
Console.Write(de.Key + ":" + de.Value + " "); //输出 jpg:jpg png:png txt:txt //注意这个顺序啊,添加的时候就自动排序了
}
Console.WriteLine();
SortedList<int,string> SLString = new SortedList<int,string>();
SLString.Add(3, "333");
SLString.Add(2, "222");
SLString.Add(1, "111");
foreach (KeyValuePair<int,string> des in SLString) //返回的是KeyValuePair,在学习的时候尽量少用var,起码要知道返回的是什么
{
Console.Write(des.Key + ":" + des.Value + " ");
}
Console.ReadKey();
BitArray
位结构 二进制位(0和1)的集合
BitArray的值表示true或false。true表示位打开,false表示位关闭。BitArray实现了ICollection和IEnumerable接口。
1、BitArray集合不支持动态调整,因此没有Add和Remove方法。
2、若需要调整集合的大小,可通过设置属性Length的值来实现。
3、集合中的索引从0开始。
4、使用BitArray(int length)构造函数初始化BitArray集合后,其值均为false。
5、BitArray集合之间支持按位“或”、“异或”、“与运算”,参与这三类运算的BitArray集合长度必须相等。否则会抛出异常。
BitArray BA = new BitArray(3);
BA[0] = true;
BA[1] = false;
BA[2] = true;
BitArray BB = new BitArray(3);
BA[0] = true;
BA[1] = false;
BA[2] = true;
BitArray BOr = BA.Or(BB); //与运算,返回一个新的BitArray
foreach (var b in BOr)
{
Console.Write(b + "-"); //True-False-True
}
HashTable Queue Stack SortedList BitArray的更多相关文章
- stl容器学习——queue,stack,list与string
目录 头文件 string 目录部分 1.string的定义及初始化 ① 用一个字符串给另一个字符串赋值 ②用字符串常量对字符串进行赋值 ③ 用n个相同的字符对字符串赋值 2.string的运算符及比 ...
- C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)
1.ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在ArrayList中主要使用Add.Remove.RemoveAt.Insert四个方法对栈进行操作.Add方法 ...
- 【Todo】Java Queue Stack Vector ArrayList
Java集合框架里存在Queue这个接口,之后有不同类型的队列的实现. 有Stack这个类实现堆栈,其实这个类是通过继承Vector的方式来实现的, Vector和ArrayList的实现方式差不多, ...
- page74-泛型可迭代的基础集合数据类型的API-Bag+Queue+Stack
[泛型可迭代的基础集合数据类型的API] 背包:就是一种不支持从中删除元素的集合数据类型——它的目的就是帮助用例收集元素并迭代遍历所有收集到的元素.(用例也可以检查背包是否为空, 或者获取背包中元素的 ...
- Part 82 to 85 Talking about Generic queue, stack collection class
Part 82 Generic queue collection class Part 83 Generic stack collection class Part 84 Real tim ...
- Java 集合的简单实现 (ArrayList & LinkedList & Queue & Stack)
ArrayList 就是数组实现的啦,没什么好说的,如果数组不够了就扩容到原来的1.5倍 实现了迭代器 package com.wenr.collection; import java.io.Seri ...
- queue,stack的相互实现
Implement Queue using Stacks [抄题]: [思维问题]: [一句话思路]: 取头部.取出来的时候,用一个output来倒序 [输入量]:空: 正常情况:特大:特小:程序里处 ...
- STL之queue&stack使用简介
queue 队列也是一个线性存储表,与后进先出的堆栈不同,元素数据的插入在表的一端进行,在另一端删除,从而构成了一个先进先出(First In First Out) 表.插入一端称为队尾,删除一 ...
- C++ 数据结构模板 队列 栈 动态链表 模板 Queue Stack List
C++数据结构模板,可以实现基本功能,用法和stl差不多,比如Q.pop();Q.push(a);Q.front();...... (由于动态链表用的不多,若有错误望各位大神不吝赐教:) 队列: cl ...
随机推荐
- DOM中的outerHTML,innerHTML,outerText,innerText的区别
--转自http://blog.163.com/yw_0721/blog/static/7164579720102932157759/ 简单的说innerHTML和outerHTML.innerTex ...
- shell案例题
目录: 1.批量生成随机字符文件名案例 2.批量改名特殊案例 3.批量创建特殊要求用户案例 1.批量生成随机字符文件名案例(P359) (1).利用openssl命令来实现 #!/bin/bash # ...
- Ubuntu16.04更新记
大概一周前因为不可抗因素,我再次安装了Ubuntu16.04LTS 对于之前发誓不想再用Ubuntu的我,我只想说一句:真香 写一点我现在Ubuntu的配置,方面自己以后查看,也方便如果有相同需求的人 ...
- 2017-2018-2 20165306 实验三《敏捷开发与XP实践》实验报告
实验三<敏捷开发与XP实践>实验报告 实验报告封面 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一) 敏捷开发与XP实践-1 实验要求: 参考 代码规范 安装alibaba 插 ...
- 批量Excel数据导入Oracle数据库
由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...
- Python open 对应的参数
- Codeforces Round #219 (Div. 2) D. Counting Rectangles is Fun 四维前缀和
D. Counting Rectangles is Fun time limit per test 4 seconds memory limit per test 256 megabytes inpu ...
- sklearn dataset 模块学习
sklearn.datasets官网:http://scikit-learn.org/stable/datasets/ sklearn.datasets 模块主要提供一些导入.在线下载及本地生成数据集 ...
- C.【转】C语言字符串与数字相互转换
1.gcvt 把浮点数转成字符串 - CSDN博客.html(https://blog.csdn.net/dxuehui/article/details/52791412) 1.1. 函数名: gcv ...
- [原][粒子特效][spark]深入浅出osgSpark
背景: 目前我使用的spark粒子特效库是2.0 这个库好像是原来鬼火引擎的一部分,需要从github上找 现在我要将其使用到我自己开发的基于osgearth开的三维地图引擎中 步骤: 1.编译spa ...