C# 集合汇总
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleDemo.List
{ /// <summary>
/// 基础回顾:集合:
/// 1:线性结构 一对一关系
/// 2:树形结构 一对多
/// 3:图状结构 多对多
/// </summary>
public class ListDemo
{
public static void Get()
{
#region 线性结构
{ {
/*
线性结构1:\
缺陷: 长度要指定,同理string[]
优点:内存连续存储 节约空间,可以索引访问,读取速度快,增删慢
*/
int[] list = new int[];
list[] = ;
list[] = ;
list[] = ; }
{
/*
线性结构1:\
缺陷: 将 int[],string[]转化为泛型,装箱拆箱增加性能损耗
优点:内存连续存储 节约空间,可以索引访问,读取速度快,增删慢
*/
ArrayList list = new ArrayList();
list.Add("sun");
list.Add("say");
list.Add("hello");
list.Add(DateTime.Now);
}
}
#endregion #region 链表结构
{
/*
链表结构
单链表,双向链表,循环链表
存储格式:数据+地址
缺点:读取慢,增加了存储空间
优点:增删快
*/
List<string> list = new List<string>();//使用泛型过程中制定了格式
list.Add("hello");
list.Add("shang hai");
} {
//先进先出
Queue<string> list = new Queue<string>();
list.Enqueue("are"); //入队
list.Enqueue("you");
list.Enqueue("ok"); Console.WriteLine(string.Join(",", list)); //are,you,ok list.Dequeue(); //出队
Console.WriteLine(string.Join(",", list)); //you,ok //获取队列头部元素,不做移除动作
string value = list.Peek();//you
Console.WriteLine(value); string value1 = list.Peek();//you
Console.WriteLine(value1);
}
{
//栈
Stack<string> list = new Stack<string>();
list.Push("易烊千玺");
list.Push("崇拜");
list.Push("我");
Console.WriteLine(string.Join(",", list)); //我,崇拜,易烊千玺 list.Pop();
Console.WriteLine(string.Join(",", list)); //崇拜,易烊千玺 string value = list.Peek();
Console.WriteLine(value); //崇拜 //支持重复
list.Push("崇拜");
Console.WriteLine(string.Join(",", list)); //崇拜,崇拜,易烊千玺 } {
//排重,唯一性,IP投票 统计用户id等
HashSet<string> list = new HashSet<string>();
list.Add("啊");
list.Add("啊");
list.Add("啊");
list.Add("我看到明星了!");
//HashSet:啊,我看到明星了! 长度:2
Console.WriteLine("HashSet:" + string.Join(",", list) + " 长度:" + list.Count); }
{
//排重,唯一性,IP投票 统计用户id等
SortedSet<string> list = new SortedSet<string>();
list.Add("啊");
list.Add("啊");
list.Add("啊");
list.Add("我看到明星了!"); //SortedSet: 啊,我看到明星了! 长度: 2
Console.WriteLine("SortedSet:" + string.Join(",", list) + " 长度:" + list.Count);
}
{
//自动排序
SortedSet<int> list = new SortedSet<int>();
list.Add();
list.Add();
list.Add();
list.Add(); //SortedSet:我期待的结果是自动排序了:9,11,20 长度: 3
Console.WriteLine("SortedSet:我期待的结果是自动排序了:" + string.Join(",", list) + " 长度:" + list.Count);
}
{
//增删都快的,用空间换性能
Hashtable list = new Hashtable(); list.Add("name", "sun");
list.Add("age", );
//list.Add("age", 19);//新增相同key会报错 Console.WriteLine(string.Join(",", list.Keys.Count)); // list.Remove("age");
Console.WriteLine(string.Join(",", list.Keys.Count));// bool IsExistName = list.Contains("name");
bool IsExistNa = list.Contains("na");
//True-False
Console.WriteLine(IsExistName + "-" + IsExistNa);
}
#endregion {
//IEnumerable 使用的时候linq to object方式 Console.WriteLine("_________________________");
MyColor colors = new MyColor();
foreach (string c in colors)
{
Console.WriteLine("color is : " + c);
} //ABC[] list = new ABC[10];
//list.Add
//foreach(var a in list)
//{
// Console.WriteLine("ABC is :"+ a.Name);
//} int[] myArray = { , , , };
IEnumerator myie = myArray.GetEnumerator();
myie.Reset();
while (myie.MoveNext())
{
int i = (int)myie.Current;
Console.WriteLine("Value: {0}", i);
} /* 延时执行: IQueryable,IEnumberalb 为延时执行(用到的时候再查),IList一次性加载
顺时执行: IList一次性查询后加载到内存
IQueryable接口与IEnumberable接口的区别:
IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,
IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,
它并不是把所有数据都加载到内存里来才进行条件过滤。 */ //IQueryable 生成sql 采用表达式目录树,二叉树查找
//IQeurable(IQuerable<T>):不在内存加载持久数据,因为这家伙只是在组装SQL,(延迟执行) 到你要使用的时候,
//例如 list.Tolist() or list.Count()的时候,数据才从数据库进行加载(AsQueryable())。
//IQueryable<CustomData> list2 = dbcontext.CustomDataList.Where(t => t.PrimaryDataID == "123"); //IEnumberalb,使用的是LINQ to Object方式 内置委托,它会将AsEnumerable()时对应的所有记录都先加载到内存
//,然后在此基础上再执行后来的Query
//IEnumerable<CustomData> list2 = dbcontext.CustomDataList.Where(t => t.PrimaryDataID == "123").AsEnumerable(); // IList<CustomData> list2 = dbcontext.CustomDataList.Where(t => t.PrimaryDataID == "123").ToList(); //List:IList:ICollection:IEnumberable
Console.WriteLine("_________________________");
}
}
}
public class ABC
{
public string Name { get; set; }
} /// <summary>
/// 实现了IEnumberable接口也可以
/// </summary>
public class MyColor : IEnumerable
{
string[] colors = { "red", "white", "black", "yellow" };
public IEnumerator GetEnumerator()
{
// throw new NotImplementedException();
return colors.GetEnumerator();
}
}
}
C# 集合汇总的更多相关文章
- C#中集合汇总
平时敲代码,只关注如何使用,没有深入去研究一些本质性的东西,靠死记硬背,不去真正理解,其实最后是很难记住的. 对于C#常见的集合,自己平时好像只有用到List,Dictionary,ArrayList ...
- 【游戏】2048及各种变种大集合汇总【更新ing~新版Floppy2048 - 恒星聚变版 - 恶搞改数据】
threes - 鼻祖 手机版:http://asherv.com/threes/ js版:http://threesjs.com/ 2048 - 原版 http://gabrielecirulli. ...
- 集合家族——List集合汇总
一.概述 List继承了Collection,是有序的列表. 可重复数据 实现类有ArrayList.LinkedList.Vector.Stack等 ArrayList是基于数组实现的,是一个数组队 ...
- Collection集合汇总
Collectioin(java) Collection简介 打开帮助文档 java.utill //使用时需要导包 Interface Collection 集合层次结构中的根界面 . 集合表示一组 ...
- 2017上半年技术文章集合【Android】—184篇文章分类汇总
地址: http://blog.csdn.net/androidstarjack/article/details/77923753 声明 | 本文是于亚豪 原创 终端研发部 前言: 2017年已经过大 ...
- Java 集合介绍
1, Set :集合中对象不按特定的方式排序,并且没有重复对象,它有些实现类能对集合按特定方式排序 List :集合中对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索独享,Li ...
- OC学习13——Foundation框架中的集合
OC集合类是一些非常有用的工具类,它可以用于存储多个数量不等的对象,并可以实现常用的数据结构(栈.队列等),此外,OC集合还可用于保存具有映射关系的关联数组.OC的集合大致可以分为:NSArray.N ...
- WinForm获取当前路径汇总
Winform获取应用程序的当前路径的方法集合汇总,值得收藏备用 具体如下, //获取当前进程的完整路径,包含文件名(进程名). string str = this.GetType().Assembl ...
- Collection 集合框架
1. Collection 集合框架:在实际开发中,传统的容器(数组)在进行增.删等操作算法和具体业务耦合在一起,会增加程序的开发难度:这时JDK提供了这样的容器---Collection 集合框架, ...
随机推荐
- ASP.NET Core3.X 终端中间件转换为端点路由运行
引言 前几天.NET Core3.1发布,于是我把公司一个基础通用系统升级了,同时删除了几个基础模块当然这几个基础模块与.NET Core3.1无关,其中包括了支付模块,升级完后静文(同事)问我你把支 ...
- 基于netty4.x开发时间服务器
在写代码之前 先了解下Reactor模型: Reactor单线程模型就是指所有的IO操作都在同一个NIO线程上面完成的,也就是IO处理线程是单线程的.NIO线程的职责是: (1)作为NIO服务端,接收 ...
- 大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作
网站登录 现在各大平台在反爬虫功能上,可谓花样繁多.总结下来按照破解成功率排名,最高的是滑动解锁.其次是验证码数字.之后是一次点击对应的汉字,最后是想12306之前那种反人类的让你说那些是奶糖吧,哈哈 ...
- 最新Navicat Premium12 破解方法,亲测可用
1.下载Navicat Premium 官网https://www.navicat.com.cn/下载最新版本下载安装(文末,网盘地址有64位安装包和注册机下载) 2.激活Navicat Premiu ...
- iOS RSA加解密签名和验证
转自:http://www.jianshu.com/p/81b0b54436b8 Pre:在公司负责了一个项目,需要用到iOS RSA验证签名的功能.后台给我的仅仅是一个公钥的字符串.经过起初的一段时 ...
- openstack Mitaka实验环境安装(centos系统)
本博文仅供参考,具体一定详细学习官方安装文档. 一 准备工作 二安装过程 1 安装NTP服务 2 安装openstack包 3 SQL数据库安装 4 安装消息队列 message queue 5 Me ...
- PDF怎么删除页面?教你两个超级好用的方法
在日常办公中,由于工作需要我们有时候会对PDF文件中的内容进行二次编辑,可能需要删除PDF文件中的一些页面.那么PDF怎么删除页面呢?小伙伴们还在为这个问题苦恼吗?那么今天小编就来教大家两个超级好用的 ...
- CSS修饰文档
定义字体类型 <html> <head> <meta http-equiv="Content-Type" content="text/htm ...
- Dubbo 2.7新特性之异步化改造
这是why技术的第1篇原创文章 我与Dubbo的二三事 我是2016年毕业的,在我毕业之前,我在学校里面学到的框架都是SSH,即struts+spring+hibernate,是的你没有看错,在大学里 ...
- 大数据学习笔记——Hadoop高可用完全分布式模式完整部署教程(包含zookeeper)
高可用模式下的Hadoop集群搭建 本篇博客将会在之前写过的Linux的完整部署的基础上进行,暂时不会涉及到伪分布式或者完全分布式模式搭建,由于HA模式涉及到的配置文件较多,维护起来也较为复杂,相信学 ...