C# 笔记5.5 数据相关

本文详细介绍了C#编程中的基本数据类型(无符号、有符号、浮点数等)、复杂数据容器(如枚举、结构体、数组、类),以及各种数据集合(ArrayList、Stack、Queue、Hashtable)及其泛型版本。重点讨论了值类型与引用类型的装箱拆箱现象。
摘要由CSDN通过智能技术生成

变量

1.无符号

byte ushort uint ulong

2.有符号

 sbyte short int long

3.浮点数

 float double decimal

4.特殊

 char bool string

复杂数据容器

1.枚举 enum

2.结构体 struct

3.数组 (一维、二维、交错) [] [,] [][]

4.类

数据集合

1.ArrayList object数据列表

 ArrayList array = new ArrayList();
 ArrayList array2= new ArrayList();
 //增
 array.Add(1);
 //范围增加(批量增加 把另一个list容器里的内容加到后面)
 array.AddRange(array2);

 array.Insert(0, 2);
 //删
 array.Remove(1);//最前的元素
 array.RemoveAt(0);//指定位置的元素
 array.Clear();//清空
 
 //查
 //得到指定位置元素
 Console.WriteLine(array[0]);

 //查看元素是否存在
 if(array.Contains(1))
 {
     Console.WriteLine("存在1");
 }
 //正向查找元素位置
 //找到的返回值是位置 找不到 返回-1
 int index=array.IndexOf(1);
 Console.WriteLine(index);
 //反向查找元素位置
 //返回是从头开始的索引数
 index=array.LastIndexOf(true);
 Console.WriteLine(index);
 //改
 array[0] = "99";

 //遍历
 //长度
 Console.WriteLine(array.Count);
 //容量
 //避免产生过多垃圾
 Console.WriteLine(array.Capacity);

 for(int i = 0; i < array.Count; i++)
 {
     Console.WriteLine(array[i]);
 }

 foreach(object obj in array)
 {
     Console.WriteLine(obj);
 }

2.Stack 栈  先进后出

Stack stack = new Stack();
//增
//压栈
stack.Push(1);

//取
//栈中不存在删除的概念
//只有取的概念
//弹栈
object v = stack.Pop();//最后进的先出

//查
//1.栈无法查看指定位置的元素
//只能查看栈顶的内容
v = stack.Peek();
Console.WriteLine(v);

//2.查看元素是否存在于栈中
if (stack.Contains(1))
{
    Console.WriteLine("存在1");
}

//改
//栈无法改变其中元素 只能压(存)和弹(取)
//实在要改 只有清空
stack.Clear();

//遍历
//长度
Console.WriteLine(stack.Count);

//foreach遍历
foreach (object obj in stack)
{
    Console.WriteLine(obj);
}
//将栈转换为object数组
//遍历出来的顺序 也是从栈顶到栈底
object[] array= stack.ToArray();
for (int i = 0; i < array.Length; i++)
{
    Console.WriteLine(array[i]);
}
//循环弹栈
while (stack.Count > 0)
{
    object o=stack.Pop();
    Console.WriteLine(o);
}

3.Queue 队列 先进先出

Queue queue = new Queue();
//增
queue.Enqueue(1);

//取
//队列中不存在删除的概念
//只有取的概念 取出先加入的对象
object v = queue.Dequeue();

//查
//查看队列头部元素但不会移除
v = queue.Peek();
Console.WriteLine(v);

//2.查看元素是否存在于队列中
if (queue.Contains(1))
{
    Console.WriteLine("存在1");
}

//改
//队列无法改变其中元素 只能进出队列
//实在要改 只有清空
queue.Clear();

//遍历
//长度
Console.WriteLine(queue.Count);

//foreach遍历
foreach (object obj in queue)
{
    Console.WriteLine(obj);
}
//将队列转换为object数组
object[] array= queue.ToArray();
for (int i = 0; i < array.Length; i++)
{
    Console.WriteLine(array[i]);
}
//循环出列
while (queue.Count > 0)
{
    object o=queue.Dequeue();
    Console.WriteLine(o);
}

4.Hashtable 哈希表 键值对

Hashtable hashtable = new Hashtable();
//增
//不能出现相同键
hashtable.Add(1,"123");

//删
//只能通过键去删除
//删除不存在的键 没反应
hashtable.Remove(1);

hashtable.Clear();//清空

//查
//通过键查看值
Console.WriteLine(hashtable[1]);

//2.查看是否存在
//根据键查找
if (hashtable.Contains(1))
{
    Console.WriteLine("存在键为1的键值对");
}
if (hashtable.ContainsKey(1))
{
    Console.WriteLine("存在键为1的键值对");
}
//根据值查找
if (hashtable.ContainsValue("123"))
{
    Console.WriteLine("存在值为123的键值对");
}

//改
//只能改键对于的值内容 无法修改键
hashtable[1] = 100;

//遍历
//得到键值对 对数
Console.WriteLine(hashtable.Count);

//遍历所有键
foreach (object item in hashtable.Keys)
{
    Console.WriteLine("键:"+item);
    Console.WriteLine("值:" + hashtable[item]);
}
//遍历所有值
foreach (object item in hashtable.Values)
{
    Console.WriteLine("值:" + item);
}
//键值对一起遍历
foreach (DictionaryEntry item in hashtable)
{
    Console.WriteLine("键:" + item.Key+"值:" + item.Value);
}
//迭代器遍历
IDictionaryEnumerator myEnumerator = hashtable.GetEnumerator();
bool flag =myEnumerator.MoveNext();
while (flag)
{
    Console.WriteLine("键:" + myEnumerator.Key + "值:" + myEnumerator.Value);
    flag = myEnumerator.MoveNext();
}

ArrayList、Stack、Queue、Hashtable中存储的都是object

由于用万物之父来存储数据,自然存在装箱拆箱。

当往其中进行值类型存储时就是在装箱。

当将值类型对象取出来转换使用时,就存在拆箱.

泛型数据集合

1.List 列表 泛型列表

2.Dictionary 字典 泛型哈希表

3.LinkedList 双向链表

4.Statck 泛型栈

Stack<int> stack = new Stack<int>();增删查改与Stack相同

5.Queue 泛型队列

Queue<int> queue = new Queue<int>();增删查改与Queue相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值