数据结构
- 线性数据: 线性表*、栈、队列、串、数组和文件;
- 非线性数据: 散列表、树和图;
线性数据
Array | 就是数组,高效;但是其容量固定且无法动态改变,需要处理的元素数量确定并且需要使用下标进行访问时可以考虑,不过建议使用List<T>。 |
ArrayList | 容量可动态增长;但牺牲效率,基于效率和类型检验,应尽可能使用array,无法确定数组大小时才使用ArrayList!,不推荐使用,建议使用泛型List<T>。 |
泛型List<T> | 需要处理的元素数量不确定时,通常建议使用。 |
LiskedList<T> | 链表适合元素数量不固定,而且需要经常增减节点的情况,链表增减元素效率高。 |
Queue<T> | 队列适合于先进先出的情况。 |
Stack<T> | 堆栈适合于先进后出的情况。 |
Dictionary<K,T> | 相当于JS中的map,字典适合于需要键值对操作的情况。 |
常用集合
- 数组
Array
- 列表
List
:List<T>
是与数组相当的集合类 - 动态数组
ArrayList
、List<T>
- 键值对集合
- 哈希集合/哈希表
Hashtable
- 字典
Dictionary<K,V>
- 哈希集合/哈希表
- 堆栈
Stack
、Stack<T>
,堆栈的特点是后进先出(LIFO, Last In First Out)。 - 队列
Queue
、Queue<T>
,队列的特点是先进先出(FIFO, First In First Out)。 - 可排序键值对:特点是插入、检索没有哈希表集合高效
- 有序列键值对列表
SortedList
、SortedList<K,V>
特点是占用内存更少,可通过索引访问。 - 有序字典
SortedDictionary
特点是占用内存更多,没有索引,但插入和删除元素的速度比SortedList
快。
- 有序列键值对列表
-
Set
集合:特点是无序、不重复。-
HashSet<T>
集合可将HashSet类视为不包含值得Dictionary
集合,与List<T>
类似。 -
SortedSet<T>
在.NET4.0支持,有序无重复的集合。
-
- 双向链表集合:
LinkedList<T>
特点是增删速度快
https://blog.csdn.net/Michaelia_hu/article/details/88398205?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2alltop_click~default-1-88398205.nonecase&utm_term=c#%E4%B8%AD%E5%AD%98%E5%82%A8%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84&spm=1000.2123.3001.4430
https://www.cnblogs.com/Dewumu/p/12067573.html
https://blog.csdn.net/a1256242238/article/details/72887731
https://www.cnblogs.com/jesse2013/p/CollectionsInCSharp.html#b02
https://www.cnblogs.com/Aaxuan/p/8644298.html
https://www.cnblogs.com/yuyuefly/p/9685321.html
https://blog.csdn.net/zcaixzy5211314/article/details/80784329
https://www.cnblogs.com/itsone/p/10220677.html
https://www.cnblogs.com/songwenjie/p/9185790.html
C#基本数据类型
https://www.cnblogs.com/liangxiaofeng/p/5620684.html
JS中3种常见的集合
1.Array数组
创建一个数组,有三种方法:
1: 常规方式:
var myCars=new Array();
myCars[0]="Saab";
myCars[1]="Volvo";
myCars[2]="BMW";
2: 使用 Array 构造函数方式:
var arr1 = new Array(); //创建一个空数组
var arr2 = new Array(20); // 创建一个包含20项的数组
var arr3 = new Array("lily","lucy","Tom"); // 创建一个包含3个字符串的数组
3: 字面方式:
var arr4 = []; //创建一个空数组
var arr5 = [20]; // 创建一个包含1项的数组
var arr6 = ["lily","lucy","Tom"]; // 创建一个包含3个字符串的数组
https://www.cnblogs.com/zyfeng/p/10541133.html
2.Map集合(存储的是键值对的形式,具有极快的查找速度.初始化Map需要一个二维数组,或者直接初始化一个空Map。) js键值对;;类似于对象的属性;;通过键来映射,映射
new Map([iterable])
参数 iterable 可以是一个数组或者其他 iterable 对象,其元素或为键值对,或为两个元素的数组。 每个键值对都会添加到新的 Map。null 会被当做 undefined。
var kvArray = [["key1", "value1"], ["key2", "value2"]];
// 使用映射对象常规的构造函数将一个二维键值对数组对象转换成一个映射关系
var myMap = new Map(kvArray);
myMap.get("key1"); // 返回值为 "value1"
var m = new Map(); // 空Map <--或初始化赋值var m = new Map([['Adam', 67], ['Bob', 59]])-->;
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
此时m内部为:m= ([['Adam', 67], ['Bob', 59]]);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined
https://www.liaoxuefeng.com/wiki/1022910821149312/1024322552460832
https://www.liaoxuefeng.com/wiki/1022910821149312/1023024181109440
https://blog.csdn.net/q3254421/article/details/83795019
3.set集合(存储的元素是有序不重复的,创建一个Set,需要提供一个数组作为输入,或者直接创建一个空Set) 升级版数组,性能怪兽
作用:数组去重;两个数组并集;相对于数组,性能更强更快(把数组套在set集合里在操作更快!!!!!!!!)
查找元素: Set 比数组快了 7.54 倍
删除元素: Set 比数组快了 74.13 倍
插入元素: Set 比数组快了 6.73 倍
去重: Set 对象仅能存储不同的值。如果你想避免存储重复的值,这会比数组具有更大的优势。在数组中你需要一些额外的代码来做去重。
var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3,'3']); // 含1, 2, 3,'3'
s2.add(4);
s2; // Set {1, 2, 3, '3', 4}
s2.add(3);//可以重复添加,但不会有效果
s2; // 仍然是 Set {1, 2, 3, '3'},
s2.delete(3);
s2;//Set {1, 2, '3'}
***通过Set进行数组去重,包含Set转数组,以及数组转Set的基础操作。
var arr=[1,2,1,2,3];
console.log("初始数组:"+arr);
var s=new Set(arr);//作用:创建两个数组的并集或数组去重
console.log(s);
var arr2=Array.from(s);
console.log("去重后的数组:"+arr2);