使用集合组织相关数据
一.集合概述
特点:可动态扩容
1.ArrayList(数组列表)
类似于数组,可动态维护
命名空间:System.Collections
此命名空间包含接口和类。这些接口和类定义各种对象的集合
1.ArrayList常用方法及属性
属性名称 |
说明 |
|
---|---|---|
Count |
获取ArrayList中实际包含的元素数 |
|
Capacity |
获取ArrayList的容量 |
|
返回值类型 |
方法名称 |
说明 |
int |
Add(Object value) |
将对象添加到ArrayList的结尾处 |
void |
RemoveAt(int index) |
移除ArrayList指定索引处的元素 |
void |
Remove(Object value) |
从ArrayList中移除特定的对象 |
void |
Clear() |
从ArrayList中移除所有元素 |
bool |
Contains(Object value) |
判断ArrayList中是否包含特定对象 |
void |
Insert(int index,Object value) |
添加元素到ArrayList中的指定下标 |
示例代码:
#region 01.集合使用
ArrayList list = new ArrayList();
//1.1 扔数据进去 逻辑思维
list.Add("罗振宇===时间的朋友===跨年演讲");
list.Add("前HP CEO 卡莉·菲奥莉娜 康柏");
list.Add("隔壁老王");
list.Insert(1,"我是老二吧!");
Console.WriteLine("集合中元素总量"+list.Count);
Console.WriteLine("集合中集合容量" + list.Capacity); //容量
//1.2 遍历集合
foreach (string item in list) //自动迭代 有一个迭代器
{
Console.WriteLine(item);
}
//1.3 删除数据
//方式一:下标
// list.RemoveAt(0);
//方式二:根据内容删除
list.Remove("罗振宇===时间的朋友===跨年演讲");
Console.WriteLine("==========删除后===============");
foreach (string item in list) //自动迭代 有一个迭代器
{
Console.WriteLine(item);
}
//判定某个元素 是否在集合中
bool flag=list.Contains("李小龙");
if (flag)
{
Console.WriteLine("Exists");
}
else
{
Console.WriteLine("Not Exists");
}
#endregion
2.通过集合初始化器(Collection Initializers)构造集合
通过集合初始化器,无须在代码中指定多个对该类Add()方法的调用,编译器会添加这些调用,从而节省了很多的编码工作
示例代码:
#region 02。集合初始化器
ArrayList list2 = new ArrayList() //集合初始化
{
new SE(){Name="张靓颖",Age=20}, //对象初始化器
new SE()
};
#endregion
2.Hashtable(双列集合)
通常称为:哈希表,它的每个值都是一个键/值对
命名空间:System.Collections
常用属性及方法:
属性名称 |
说明 |
|
---|---|---|
Count |
获取包含在Hashtable中键/值对的数目 |
|
Keys |
获取包含在Hashtable中键的集合 |
|
Values |
获取包含在Hashtable中值的集合 |
|
返回值类型 |
方法名称 |
说明 |
void |
Add(Object key,Object value) |
将代言指定键和值的元素添加到Hashtable中 |
void |
Remove(Object key) |
从Hastable中移除带有指定键的元素 |
void |
Clear() |
从Hastable中移除所有元素 |
★对HashTable遍历三种方案:
☆:第一种方式,遍历所有的keys,通过key的值获取value
☆:第二种方式:遍历所有的value集合
☆:第三种方式,同时遍历key和value
示例代码:
#region 01.双列集合HashTable(哈希表)
Hashtable table = new Hashtable(); //table中的一个item=key+value
table.Add("ICBC", "工商银行");
table.Add("ABC", "农业银行");
table.Add("CBC","中国建设银行");
//根据key获取value
Object bankName=table["ICBC"];
Console.WriteLine(bankName);
Console.WriteLine("===============================");
//遍历的手段
//foreach for 因为HashTable 只有key没有索引,for 通过下标取值
//Value 方式一:通过Key取出Value
foreach (Object key in table.Keys)
{
Console.WriteLine(key);
//索引器
Console.WriteLine(table[key]);
}
//直接Value,如果我们能拿到所有值的集合 。
foreach (Object value in table.Values)
{
Console.WriteLine(value);
}
//key+value 迭代 ,一次拿到的是key+value的组合
foreach (DictionaryEntry item in table)
{
//Console.WriteLine("");
Console.WriteLine(item.Key);
Console.WriteLine(item.Value);
}
#endregion
3.集合扩充原理:(Cpcity)
初始状态,容量为0
开始出现,容量为4
每次超过当前容量,容量为(当前容量*2)
扩容的触发时机是在调用Add()方法的时候
简单示例代码:
int[] nums = new int[0];
int num = (nums.Lentght==0)?4:(nums.Lenght*2);
二.泛型和泛型集合
1.泛型
引入概念:集合参数类型
可以最大限度地重用代码,保护类型的安全及提高性能
List<T>,Dictionary<K,V>
#region 01.泛型集合先导课程
PM pm = new PM();
SE s1 = new SE();
SE s2 = new SE();
ArrayList list = new ArrayList();
list.Add(pm);
list.Add(s1);
list.Add(s2);
foreach (Object item in list)
{
}
//PM pmResult=(PM)list[0];
//SE seResult1 = (SE)list[1];
//SE seResult2 = (SE)list[2];
#endregion
2.泛型集合List<T>
代替ArrayList
命名空间:System.Collection.Generic
语法:
List<T> 对象名 = new List<T>();
//“<T>”中T可以对集合中元素类型进行约束
示例代码:
#region 02.泛型集合
//<真实类型> 限定 Add()入参的类型
List<SE> list = new List<SE>();
SE se=new SE();
se.Name = "比尔·盖茨";
SE se2 = new SE();
se2.Name = "李彦宏";
list.Add(se);
list.Add(se2);
foreach (SE item in list)
{
Console.WriteLine(item.Name);
}
#endregion
3.泛型集合Dictionary<K,T>
代替Hashtable
命名空间:System.Collection.Generic
语法:
Dictionary<K,V> 对象名 = new Dictionary<K,V>
//“<K,V>”中K表示集合中Key的类型,V表示Value的类型
废话不多说,上代码:
#region 03.双列集合 Dictionay<K,V>
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("ICBC","中国工商银行");
dic.Add("ABC", "中国农业银行");
dic.Add("CBC", "中国建设银行");
//找一下 EBank 有没有在集合中
bool flag=dic.ContainsKey("EBank");
if (flag)
{
Console.WriteLine("存在");
}
else
{
Console.WriteLine("不存在");
}
//双列集合遍历方案
//方式一:
foreach (string key in dic.Keys)
{
Console.WriteLine(key);
Console.WriteLine(dic[key]);
}
//方式二;直接获取Value
foreach (string value in dic.Values)
{
Console.WriteLine(value);
}
//方式三:key+value =======item
foreach (KeyValuePair<string,string> item in dic)
{
Console.WriteLine(item.Key);
Console.WriteLine(item.Value);
}
#endregion
KeyValuePair<TKey,TValue>是一个泛型结构,定义可设置或检索的键/值对。这部分就不多做结束,大家可以通过MSDN了解
★注:泛型集合可以作为类的一个属性,使用泛型集合必须实例化~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JavaWeb - Filter 和 Listener
- Python入门系列第一章--第二节:我的第一个Python项目
- Python入门系列第二章--第二节:注释
- JavaScript进阶教程(4)-函数内this指向解惑call(),apply(),bind()的区别
- 第三章--第一节:条件判断语句
- 用 Python 实现朋友圈中的九宫格图片
- 第三章--第二节:循环语句
- 第三章--第三节:列表
- 第三章--第三节(补充):列表排序
- 第三章--第四节:字典
- 2020最新Android面筋:太难了!历经一周对接6个面试官后,我的头条Offer终于来了!
- 第三章--第五节:集合
- Python 爬虫超详细讲解(零基础入门,老年人都看的懂)
- JavaWeb - Linux Operating System
- 第三章--第六节:元祖