目录
1、 什么是 ArrayList ,如何存放数据?
动态数组(ArrayList)代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。
下表列出了 ArrayList 类的一些常用的 方法 :
序号 | 方法名 & 描述 |
1 | public virtual int Add( object value ); 在 ArrayList 的末尾添加一个对象。 |
2 | public virtual void AddRange( ICollection c ); 在 ArrayList 的末尾添加 ICollection 的元素。 |
3 | public virtual void Clear(); 从 ArrayList 中移除所有的元素。 |
4 | public virtual bool Contains( object item ); 判断某个元素是否在 ArrayList 中。 |
5 | public virtual ArrayList GetRange( int index, int count ); 返回一个 ArrayList,表示源 ArrayList 中元素的子集。 |
6 | public virtual int IndexOf(object); 返回某个值在 ArrayList 中第一次出现的索引,索引从零开始。 |
7 | public virtual void Insert( int index, object value ); 在 ArrayList 的指定索引处,插入一个元素。 |
8 | public virtual void InsertRange( int index, ICollection c ); 在 ArrayList 的指定索引处,插入某个集合的元素。 |
9 | public virtual void Remove( object obj ); 从 ArrayList 中移除第一次出现的指定对象。 |
10 | public virtual void RemoveAt( int index ); 移除 ArrayList 的指定索引处的元素。 |
11 | public virtual void RemoveRange( int index, int count ); 从 ArrayList 中移除某个范围的元素。 |
12 | public virtual void Reverse(); 逆转 ArrayList 中元素的顺序。 |
13 | public virtual void SetRange( int index, ICollection c ); 复制某个集合的元素到 ArrayList 中某个范围的元素上。 |
14 | public virtual void Sort(); 对 ArrayList 中的元素进行排序。 |
15 | public virtual void TrimToSize(); 设置容量为 ArrayList 中元素的实际个数。 |
2、 什么 Queue ,如何存放数据?
队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为 入队 ,当您从列表中移除一项时,称为 出队 。
Queue 类的方法和属性
下表列出了 Queue 类的一些常用的 属性 :
属性 | 描述 |
Count | 获取 Queue 中包含的元素个数。 |
下表列出了 Queue 类的一些常用的 方法 :
序号 | 方法名 & 描述 |
1 | public virtual void Clear(); 从 Queue 中移除所有的元素。 |
2 | public virtual bool Contains( object obj ); 判断某个元素是否在 Queue 中。 |
3 | public virtual object Dequeue(); 移除并返回在 Queue 的开头的对象。 |
4 | public virtual void Enqueue( object obj ); 向 Queue 的末尾添加一个对象。 |
5 | public virtual object[] ToArray(); 复制 Queue 到一个新的数组中。 |
6 | public virtual void TrimToSize(); 设置容量为 Queue 中元素的实际个数 |
3、 什么 Stack ,如何存放数据?
C# Stack (栈)是常见的数据结构之一,栈是一种先进后出的结构,即元素从栈的尾部插入,从栈的尾部移除
4、 什么 Hashtable ,如何存放数据?
- 哈希表(HashTable)简述
在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.
- 什么情况下使用哈希表
(1)某些数据会被高频率查询
(2)数据量大
(3)查询字段包含字符串类型
(4)数据类型不唯一
- 哈希表的使用方法
哈希表需要使用的namespace
using System.Collections; using System.Collections.Generic;
哈希表的基本操作:
//添加一个keyvalue键值对: HashtableObject.Add(key,value); //移除某个keyvalue键值对: HashtableObject.Remove(key); //移除所有元素: HashtableObject.Clear(); // 判断是否包含特定键key: HashtableObject.Contains(key);
5、 什么泛型,如何存放数据?
泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。
您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型
6、 使用泛型技术保存从学生表里查询的全部学生信息。
using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApp1 { public class Student { //字段 private string _account; private string _name; private string _usertype; private string _password; private string _vip; private string _garde; private string _amount; private string _age; private string _hobby; private string _department; //属性 public string Account { get => _account; set => _account = value; } public string Name { get => _name; set => _name = value; } public string Usertype { get => _usertype; set => _usertype = value; } public string Password { get => _password; set => _password = value; } public string Vip { get => _vip; set => _vip = value; } public string Garde { get => _garde; set => _garde = value; } public string Amount { get => _amount; set => _amount = value; } public string Age { get => _age; set => _age = value; } public string Hobby { get => _hobby; set => _hobby = value; } public string Department { get => _department; set => _department = value; } //构造函数 public Student() { } public Student(string studentAccount, string studentPasswd) { _account = studentAccount; _password = studentPasswd; } public Student(string studentAccount, string studentPasswd, string stdentName, string studentTel) { _account = studentAccount; _password = studentPasswd; _name = stdentName; _usertype = studentTel; } public Student(string studentAccount, string studentPasswd, string stdentName, string studentTel,string vip,string garde,string amount,string age,string hobby,string department) { _account = studentAccount; _password = studentPasswd; _name = stdentName; _usertype = studentTel; _vip = vip; _garde = garde; _account = amount; _age = age; _hobby = hobby; _department = department; } } //功能类 public class HandleStudent { //操作方法 /// <summary> /// 连接数据库 /// </summary> /// <returns>MySqlConnection 数据库连接对象</returns> public static MySqlConnection HandleConnection() { MySqlConnection con = new MySqlConnection("Server=127.0.0.1;Database=studentsinfo;UserId=root;Password=qq2686485465;"); return con; } /// <summary> /// 根据主键判断 是否存在学生 /// </summary> /// <param name="key"></param> /// <returns>boolea 存在返回真,不存在返回假</returns> public static bool HandleStudentIsIn(string key) { //对参数进行处理验证 if (Equals(key.Trim(), "")) return false; //连接数据库 MySqlConnection con = HandleConnection(); //打开数据库 con.Open(); //参数化拼接字符串 string sql = "Select*from students where `account` = @Account"; //创建命令对象 MySqlCommand cmd = new MySqlCommand(sql, con); //指定参数 cmd.Parameters.Add(new MySqlParameter("@Account", key)); //执行 MySqlDataReader dr = cmd.ExecuteReader(); //判断 if (dr.Read()) { con.Close(); return true; } else { con.Close(); return false; } } /// <summary> /// 登录验证 /// </summary> /// <param name="studentAccount">账号</param> /// <param name="studentPwd">密码</param> /// <returns>Boolean 验证成功返回真,否则返回假</returns> public static bool HandleLogin(string studentAccount, string studentPwd) { //对参数进行处理验证 if (Equals(studentAccount.Trim(), "") || Equals(studentPwd.Trim(), "")) return false; //连接数据库 MySqlConnection con = HandleConnection(); //打开数据库 con.Open(); //参数化拼接字符串 string sql = "Select*from students where `account` = @Account AND `password` = @Password"; //创建命令对象 MySqlCommand cmd = new MySqlCommand(sql, con); //指定参数 cmd.Parameters.Add(new MySqlParameter("@Account", studentAccount)); cmd.Parameters.Add(new MySqlParameter("@Password", studentPwd)); //执行 MySqlDataReader dr = cmd.ExecuteReader(); //判断 if (dr.Read()) { con.Close(); return true; } else { con.Close(); return false; } } /// <summary> /// 添加学生 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="student"></param> /// <returns>int型 操作影响的行数</returns> public static int HandleAddStudents<T>(HandleStudent student) { MySqlConnection con = HandleConnection(); con.Open(); //判断学生是否存在,信息是否完善 if (HandleStudentIsIn(student.Account) || Equals(student.Account, "") || Equals(student.Name, "") || Equals(student.Password, "") || Equals(student.Usertype, "")) return 0; //添加学生信息 string sql = "INSERT INTO students(`account`,`name`,`usertype`,`password`,`vip`,`garde`,`amount`,`age`,`hobby`,`department`)" + "VALUES" + "(@Account,@Name,@UserType,@Password,1,0,0,0,'IT','OMTPC')"; MySqlCommand cmd = new MySqlCommand(sql, con); cmd.Parameters.Add(new MySqlParameter("@Account", student.Account)); cmd.Parameters.Add(new MySqlParameter("@Name", student.Name)); cmd.Parameters.Add(new MySqlParameter("@UserType", student.Usertype)); cmd.Parameters.Add(new MySqlParameter("@Password", student.Password)); int rows = cmd.ExecuteNonQuery(); con.Close(); return rows; } public static List<Student> GetAllStudents() { List<Student> ls = new List<Student>(); try { MySqlConnection con = HandleConnection(); con.Open(); string str = "SELECT*FROM `students`"; } catch (Exception e) { } finally { } } } }