数组、集合和泛型
- 格式:pdf
- 大小:1.96 MB
- 文档页数:36
C#中的泛型和泛型集合⼀、什么是泛型?泛型是C#语⾔和公共语⾔运⾏库(CLR)中的⼀个新功能,它将类型参数的概念引⼊.NET Framework。
类型参数使得设计某些类和⽅法成为可能,例如,通过使⽤泛型类型参数T,可以⼤⼤简化类型之间的强制转换或装箱操作的过程(下⼀篇将说明如何解决装箱、拆箱问题)。
说⽩了,泛型就是通过参数化类型来实现在同⼀份代码上操作多种数据类型,利⽤“参数化类型”将类型抽象化,从⽽实现灵活的复⽤。
使⽤泛型给代码带来的5点好处:1、可以做⼤限度的重⽤代码、保护类型的安全以及提⾼性能。
2、可以创建集合类。
3、可以创建⾃⼰的泛型接⼝、泛型⽅法、泛型类、泛型事件和泛型委托。
4、可以对泛型类进⾏约束,以访问特定数据类型的⽅法。
5、关于泛型数据类型中使⽤的类型的信息,可在运⾏时通过反射获取。
例⼦:using System;namespace ConsoleApp{class Program{class Test<T>{public T obj;public Test(T obj){this.obj = obj;}}static void Main(string[] args){int obj1 = 2;var test = new Test<int>(obj1);Console.WriteLine("int:" + test.obj);string obj2 = "hello world";var test1 = new Test<string>(obj2);Console.WriteLine("String:" + test1.obj);Console.ReadKey();}}} 输出结果是: int:2 String:hello world 分析: 1、 Test是⼀个泛型类。
C语言集合的实现C语言是一种通用的程序设计语言,提供了丰富的数据结构和算法库。
在C语言中,集合是一种存储不重复元素的数据结构,常用于需要存储、查询和操作一组不同元素的场景。
本文将介绍C语言中集合的实现方式,并详细解释其原理和应用。
1.集合的定义集合是一种不包含重复元素的容器,没有特定的顺序。
在C语言中,可以使用数组或链表等数据结构来实现集合。
集合通常有以下几个基本操作:插入元素、删除元素、判断元素是否存在、求并集、求交集、求差集等。
2.集合的实现方式2.1使用数组实现集合使用数组实现集合比较简单,只需要定义一个固定大小的数组,然后使用元素的值作为下标来标记元素是否存在。
例如,要存储范围在0-9之间的整数集合,可以定义一个大小为10的数组,数组下标代表元素值,数组元素的值用于表示元素是否存在。
下面是使用数组实现集合的示例代码:```c#define SIZE 10//初始化集合void initSet(int set[])for (int i = 0; i < SIZE; i++)set[i] = 0;}//插入元素void insertElement(int set[], int element) if (element >= 0 && element < SIZE)set[element] = 1;}//删除元素void deleteElement(int set[], int element) if (element >= 0 && element < SIZE)set[element] = 0;}//判断元素是否存在int isElementExist(int set[], int element) if (element >= 0 && element < SIZE)return set[element];} elsereturn 0;}//打印集合void printSet(int set[])for (int i = 0; i < SIZE; i++) if (set[i] == 1)printf("%d ", i);}}int maiint set[SIZE];initSet(set);insertElement(set, 1); insertElement(set, 3); insertElement(set, 5); deleteElement(set, 3);printf("集合中的元素为:"); printSet(set);return 0;```这段代码中,先定义了一个大小为10的数组作为集合的存储空间。
1.集合框架√2.泛型√3.异常√1.掌握常用的集合类(接口)2.充分理解什么是泛型3.掌握java中的异常■一个问题?前面我们学习了数组,充分体会到数组的优越性,就是可以存储同一类型的数据,但是我们假设有这样的需求,大家看看如何解决?请做一个公司职员薪水管理系统,要求完成如下功能:①当有新员工时,将该员工加入到管理系统①可以根据员工号,显示该员工的信息.②可以显示所有员工信息③可以修改员工的薪水⑤当员工离职时,将该员工从管理系统中删除⑥可以按照薪水从低到高顺序排序【思考题】⑦可以统计员工的平均工资和最低和最高工资.■问题分析当然,我们可以使用数组来解决,可是用数组的话,有什么问题,我们来看看:■解决之道-链表或是集合类我们想,如果有这样一种数组,它可以动态的改变就好了,java的设计者为我们提供了一系列的集合类,我们来看看.■解决之道-链表或是集合类我们想,如果有这样一种数组,它可以动态的改变就好了,java的设计者为我们提供了一系列的集合类,我们来看看.■解决之道-链表或是集合类■使用从上面的图可以看出java集合类主要有以下几种: List结构的集合类ArrayList类, LinkedList类, Vector类,Stack类Map结构的集合类HashMap类,Hashtable类Set结构的集合类HashSet类,TreeSet类Queue结构的集合Queue接口■使用我们给大家举几个案例来看看集合类的常用方法:【Demo6_1.java】和【Demo7_3.java】■具体应用在我们熟悉了一些集合类的基本用法后,我们来解决前面提出的公司职员薪水管理系统。
首先我们使用ArrayList这个集合类.案例【Demo7_2.java】■ArrayList和Vector的区别ArrayList与Vector都是java的集合类,都可以用来存放java对象,这是他们的相同点,但是他们也有区别:一.同步性:Vector是同步的。
数组和集合实例using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication2{class Program{static void Main(string[] args){int[] arr1 = new int[2] {1,2};int[,] arr2 = new int[2, 3] {{0,1,2 },{2,3,4 }};Console.WriteLine(arr2[1,1]);ArrayListArrayList alt = new ArrayList();alt.Add("123");alt.Add(123);alt.Add(true);bool iscontain = alt.Contains("1");alt.Clear();/*alt.Insert(0, "abc")*/;Console.WriteLine(iscontain);for(int i = 0; i < alt.Count; i++){Console.WriteLine(alt[i].ToString() + " " + alt[i].GetType().ToString());}foreach (var x in alt){Console.WriteLine(x.ToString() + " " + x.GetType().ToString());}泛型集合 ListList<string> str_list = new List<string>();str_list.Add("a");str_list.Add("b");str_list.Add("c");str_list.Add("d");foreach(string x in str_list){Console.WriteLine(x);}哈希表hashtableHashtable ht = new Hashtable();ht.Add("1","a");ht.Add(2, "b");ht.Add(3, false);ht.Add("x", 3.14);Console.WriteLine(ht[2]);foreach(var x in ht.Keys){Console.WriteLine(ht[x]);}字典表 DictionaryDictionary<string, int> dic = new Dictionary<string, int>();dic.Add("a", 3);dic.Add("b", 4);dic.Add("c", 5);dic.Add("d", 6);dic.Add("e", 7);foreach(var x in dic.Keys){Console.WriteLine(x);}队列 queueQueue que = new Queue();que.Enqueue("张三");que.Enqueue("李四");que.Enqueue("王五");que.Enqueue("赵六");Console.WriteLine("现在的长度是" + que.Count);Console.WriteLine(que.Dequeue());Console.WriteLine("现在的长度是" + que.Count);堆栈 stackStack st = new Stack();st.Push("a");st.Push("b");st.Push("c");st.Push("d");Console.WriteLine(st.Count);Console.WriteLine(st.Pop());Console.WriteLine(st.Count);Console.ReadLine();int[] arr1 = new int[2] { 1, 2 };int[,] arr2 = new int[2, 3]{{0,1,2},{2,3,4}};Console.WriteLine(arr2[1, 1]);ArrayList 特点不需要不需要限长度,不需要规定类型,缺点:键值只能是0,1,2,3往后排:ArrayList alt = new ArrayList();alt.Add("123");alt.Add(123);alt.Add(true);alt.Remove(123); 从其中移除 clear 是全部清空的意思bool iscontain=alt.Contains("123"); 看看⾥⾯是否包含"123",如果有就会显⽰"true",如果没有就会显⽰false; alt.Clear(); 全部清除:alt.Insert(0,"abc"); 意思是往 0 位置插⼊⼀个字符串"123";Console.WriteLine(alt);for (int i = 0; i < alt.Count;i++ ) {Console.WriteLine(alt[i].ToString()+" "+alt[i].GetType().ToString());}var类型是万能类型foreach(var x in alt){Console.WriteLine(x.ToString()+" "+alt[i].GetType().ToString)}泛型集合 list 需要规定类型,不需要规定长度也不⾏规定键值也是从0,1,2,3开始排List<string> str_list = new List<string>();str_list.Add("a");str_list.Add("b");str_list.Add("c");str_list.Add("d");foreach (string x in str_list) {Console.WriteLine(x);}哈希表hashtable 不错在顺序的概念Hashtable ht = new Hashtable();ht.Add("1", "a");ht.Add(2, "b");ht.Add(3, false);ht.Add("x", 3.14);//Console.WriteLine(ht[2]);foreach (var x in ht.Values) {Console.WriteLine(x);}foreach (var x in ht.Keys){Console.WriteLine(x); //取全部的值Console.WriteLine(ht[x]);}字典表 DictionaryDictionary<string, int> dic = new Dictionary<string, int>();dic.Add("a", 3);dic.Add("b", 4); 前⾯的是key键后⾯的是value值dic.Add("c", 5);dic.Add("d", 6);dic.Add("e", 7);dic.Add("f", 8);foreach (var x in dic.Keys) {Console.WriteLine(x);}队列 queue 先进先出Queue que = new Queue();que.Enqueue("张三");que.Enqueue("李四");que.Enqueue("王五");que.Enqueue("赵六");Console.WriteLine("现在的长度是" + que.Count);Console.WriteLine(que.Dequeue()); //dequeue()函数⽤于移除每个匹配元素的指定队列中的第⼀个函数,并执⾏被移除的函数。
待办事项java 课程设计一、课程目标知识目标:1. 学生能理解Java中待办事项应用的基本概念,掌握使用类和对象来表示待办事项。
2. 学生能够运用集合框架管理一组待办事项,了解数组列表和泛型集合的使用场景。
3. 学生能够掌握基本的异常处理,保证程序的稳定运行。
技能目标:1. 学生能够独立编写和调试Java程序,实现待办事项的增加、删除、查询和修改功能。
2. 学生通过本课程学习,能够掌握基本的编程规范,编写出结构清晰、易于维护的代码。
3. 学生能够运用所学知识,结合实际问题,设计出合理的算法和数据结构解决待办事项的管理问题。
情感态度价值观目标:1. 培养学生积极思考、主动探究的学习态度,增强解决问题的自信心。
2. 通过团队协作,培养学生的沟通能力和团队精神,理解合作的重要性。
3. 培养学生关注生活、发现生活中的问题,并尝试用编程解决问题的意识。
本课程针对高年级学生,结合Java学科特点,注重理论与实践相结合,培养学生的编程能力和实际应用能力。
课程目标旨在使学生能够掌握Java编程的基本知识,提高解决问题的技能,同时培养良好的情感态度价值观,为后续学习打下坚实基础。
二、教学内容1. 类与对象:介绍待办事项的概念,学习如何用Java类表示待办事项,包括属性(如标题、描述、截止日期)和方法(如完成状态切换)。
2. 集合框架:学习Java集合框架,特别是ArrayList和泛型集合List,用于存储和管理一组待办事项。
3. 异常处理:介绍异常处理的基本概念,学习如何处理运行时异常,保证程序在遇到错误时能够给出合适的反馈。
4. 编程规范:回顾和强化Java编程规范,包括命名规范、代码组织、注释使用等,提高代码的可读性和可维护性。
5. 算法与数据结构:设计简单算法实现待办事项的增加、删除、查询和修改功能,讨论不同数据结构对待办事项管理效率的影响。
教学内容安排和进度:- 第一课时:介绍待办事项概念,学习类与对象的基本知识,创建一个简单的待办事项类。
以下是一些ArkTS 的基本类型示例:
1. 基本数值类型:
整数(int):用于表示整数。
浮点数(float):用于表示带有小数的数值。
数字(number):用于表示整数或浮点数。
2. 布尔类型:
布尔(boolean):用于表示真(true)或假(false)。
3. 字符串类型:
字符串(string):用于表示文本。
4. 数组类型:
数组(array):用于表示一组值的集合。
5. 元组类型:
元组(tuple):用于表示固定数量和类型的元素集合。
6. 枚举类型:
枚举(enum):用于表示一组命名的常量。
7. 任何类型:
任何(any):用于表示不特定类型的值。
8. 未知类型:
未知(unknown):用于表示可能是任何类型的值,但在初始化后必须进行类型检查。
9. null 和undefined:
null:表示空值。
undefined:表示未定义或未初始化的值。
10. 对象和类:
对象(object):用于表示非数组的数据结构。
类(class):用于表示具有属性和方法的复合类型。
11. 接口和类型别名:
接口(interface):用于定义对象或函数的形状。
类型别名(type alias):用于为现有类型创建一个新名称。
12. 泛型:
泛型(generics):用于创建可重用、类型安全的组件。
除了上述类型,ArkTS 还提供了许多其他类型和工具,以便开发者能够更方便地构建复杂的应用程序。
这些功能包括但不限于反射、动态类型、异步编程等。