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 集合框架, ...
随机推荐
- 用墨卡托和GPS坐标计算距离时误差测试
iOS墨卡托和GPS坐标计算距离时误差测试,测试结果: 墨卡托和gps坐标来回转换没有误差. 墨卡托坐标计算出的距离比gps坐标计算出的距离大,100/92*100 = 108米,每100米多算出8米 ...
- 机器学习笔记(九)---- 集成学习(ensemble learning)【华为云技术分享】
集成学习不是一种具体的算法,而是在机器学习中为了提升预测精度而采取的一种或多种策略.其原理是通过构建多个弱监督模型并使用一定策略得到一个更好更全面的强监督模型.集成学习简单的示例图如下: 通过训练得到 ...
- request获取路径
1.request.getRequestURL() 返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它不包含请求参数. 2.request.getRequestURI( ...
- 安装破解版IntelliJ IDEA
1.下载IntelliJ IDEA http://www.jetbrains.com/idea/download/#section=windows 选择Ultimate版本 2.注册码破解 http: ...
- 洛谷 P1920 成功密码 题解
这是蒟蒻的第一篇题解,(之前的都没过,估计这篇也过不了 回到正题 这题,本蒟蒻第一眼看到以后,就决定咦,这不是模拟吗? 看到世界范围,嗯,打扰了. 扯回正题 首先,暴力肯定是A不了的(至少我A不了 但 ...
- 5分钟教你看大神操作keepalived服务
第11章 高可用服务(keepalived)的配置 11.1 高可用服务的概念 11.1.1 高可用服务总体概念 为了解决单点故障 减轻服务器的压力 11.1.2 高可用keepalived的概念 为 ...
- 【Git】405- 分享:大牛总结的 Git 使用技巧
作者:你喜欢吃青椒么 来源:juejin.im/post/5d157bf3f265da1bcc1954e6 前言 本文是参考廖雪峰老师的Git资料再加上我自己对Git的理解,记录我的Git学习历程,作 ...
- 大数据学习笔记——Spark完全分布式完整部署教程
Spark完全分布式完整部署教程 继Mapreduce之后,作为新一代并且是主流的计算引擎,学好Spark是非常重要的,这一篇博客会专门介绍如何部署一个分布式的Spark计算框架,在之后的博客中,更会 ...
- 深入理解Linux的I/O复用之epoll机制
0.概述 通过本篇文章将了解到以下内容: I/O复用的定义和产生背景 Linux系统的I/O复用工具演进 epoll设计的基本构成 epoll高性能的底层实现 epoll的ET模式和LT模式 epol ...
- Java基础篇
#JAVA day01 基础篇 字节类型的使用方法 byte b1 = 126+1; byte b2 = 127+1;//因为127+1得出的结果是int类型,所以不能转换,编译出错 byte b3 ...