黑马程序员--集合
2015-10-11 12:59
453 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
-----------并不是生来就是大神、代码量决定一切、其他都是假象、大家都不是傻子对吧?-----------
*************NSArray
排序是有顺序的*********************
NSArray
不可变oc数组
问:为什么要学习oc数组 ?
答:因为他比c语言数组强大 他可以放多种类型的对象,可以将文件内容转换成数组来进行分割或者显示
如何创建数组? oc数组时不能放nil
的 因为他的结束就是nil
注意
总结出来创建方法 NSString stringWithFmat: 类创建方法一般都是用类名开始的 其他类以此类推
//NSArray
创建方式
NSArray *array = [NSArray arrayWithObjects:@"jack",@"rose", nil];
//读取数组的个数
NSLog(@"%ld",array.count);
//打印第一个位置的数组元素
NSLog(@"%@",array[0]);
//快速创建数组
NSArray *array2 = @[@"jack",@"hei",@"hei"];
NSLog(@"%@",array2[2]);
//如何遍历数组里的每个对象
int count = 0;
//遍历数组的每个对象
for(id obj in array2)
{
count++;
}
NSLog(@"%d",count);
//直接打印数组他会打印出所有数组中的元素
NSLog(@"%@",array2);
-----------------------------------------------------------------------------------------
NSMutableArray
可变数组
//创建一个可变数组
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"hack",@"rose", nil];
//增加对象
[array addObject:@"123"];
//删除制定对象
[array removeObject:@"123"];
//删除制定位置的对象
[array removeObjectAtIndex:2];
-----------------------------------------------------------------------------------------
NSMutableSet *set = [NSMutalbeSet setWithObject:@"jack",@"rose",nil];
无序
//增加元素方法
[set addObject:@"lucy"];
//删除元素只能删除指定元素名称
不能删除指定位置 因为他时无序的
[set removeobject:@"rose"];
----------------------------
//
不可变数组不能使用快速创建
NSMutableArray *array = @[@"ack",@"rose"];
----------------------------
-----------------------------------------------------------------------------------------
总结:NSSet
和NSArray
比较
1>共同点
*都是集合,都能存放oc对象
*只能存放oc对象,不能存放非oc对象类型(基本数据类型:int,char,float等,结构体,枚举)
*本身都是不可变的,都有一个可变的子类
2>不同点
*NSArray
数组元素是有序的
*NSSet
是无序的
NSMutalbeSet
获取方法为
[set anyObject]
获取随机元素 返回NSString类型
NSString *str = [set anyObject];
------------------------------------------------------------------------------------------------
NSDictionary不可变
字典 排列没有顺序的
唯一key 不能有2个相同的key
如何出现后面写的将会覆盖之前写的
如果出现多个key
后面设置的会覆盖之前设置的
字典
问:问什么要学习NSDictionary ?
答:他很方便啦 例如讲 一个人的姓名 年龄 qq号 电话 性别 等等 完全可以利用字典来存储 然后放入NSArray中
搞成一个档案数据库 生活中也有很多例子 例如 在取款机 查询自己余额:他就会立刻显示你有多少钱
例如你查美女的电话号码 输入美女名字 立刻就会出来她的电话 等等 看你自己理解了
这里你要美女的号码 就代表key(索引) 而显示出来的号码入138138就表示value (内容)
他们是配对存在的 称为键值对 格式 一个key(唯一的) 独影一个value
key ---> value 称为键值对
索引 --->
文件内容
根据索引(key)就能找到对应的内容(value)
创建方法
//第一种方法
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack",@"name"];
//第二种方法
NSDictionary *dict = [NSDictionary dictionarywithObject:@"jack,@"name",@"rose",@"name2",nil];
//快捷创建方法只能用在NSDictionary
//格式 @{@"key" : @"value", @"key" : @"value"};返回NSDictionary类型
必要用在NSMutableDictionary
NSdictionary *dict = @{@"name" : @"jack", @"name2" : @"lucy"};
//获取方法
他返回的是id类型
id obj = [dict ObjectForKey:@"name"];
//获取方法2
id obj = dict[@"name"];
----------------------------------------------------------------------------------------------
NSMutableDictionary
可变字典 无序
//创建字典方法
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObject:@"jack" forKey:@"name"];
//增减一个键值对
[d setObject:@"hehe" forKey:@"name2"];
//删除指定key的键值对
[d removeObjectForKey:@"name"];
//获取键值
id obj = d[@"name"];
NSLog(@"%@,%ld",obj,d.count);
//创建字典方法
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObject:@"jack" forKey:@"name"];
//增加键值对
[d setObject:@"rose" forKey:@"name2"];
[d setObject:@"lucy" forKey:@"name3"];
//遍历之前
先把key 传给数组
然后在 然后通过数组
//数组是有序的
通过数组遍历得到key[i]
然后在读取key[i]得到value
//所以说NSArray和Dictionary是一个很好的组合
NSArray *key = [d allKeys];
for(int i = 0 ; i < d.count ; i++)
{
NSLog(@"%@==%@",key[i],d[key[i]]);
}
//当然直接打印 dictionary
也是可以现实全部内容的
NSLog(@"%@",d);
-----------------------------------------------------
快速遍历方法
无序
NSDictionary *dict = @{@"name" : @"jakc", @"name2" : @"rose", @"name3" : @"lucy"};
//快速遍历方法
无序
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
//打印key
和value
NSLog(@"%@--%@",key,obj);
//停止遍历
//*stop = YES;
}];
集合总结:
1.NSArray\NSMutalbeArray
数组 有序
*有序
*快速创建: @[]; mutalbearray没有快速
*快速读取方法:array[i];
2.NSSet\NSMutalbeSet
数组
*无序
3.NSDictionary\NSMutalbeDictionary字典
键值对
通过key 找到value
*无序
*快速创建(不可变): @{key : value, key2 : value};
*快速读取:字典名[key];
练习:
//创建一个有4个对象的数组
NSArray *person = @[
@{@"name1" : @"jack1" , @"qq1" : @"9821"},
@{@"name2" : @"jack2" , @"qq2" : @"9822"},
@{@"name3" : @"jack3" , @"qq3" : @"9823"},
@{@"name4" : @"jack4" , @"qq4" : @"9824"}
];
//用数组person
得到第二个字典
[2]
NSDictionary * j = person[1];
//打印对象的所有属性
NSLog(@"%@",j);
//利用字典对象读取key
调用value
NSLog(@"%@",j[@"qq2"]);
// 先利用 person[1]对应的指点
然后在用字典取出key对应的数据
NSLog(@"%@",person[1][@"qq2"]);
-----------并不是生来就是大神、代码量决定一切、其他都是假象、大家都不是傻子对吧?-----------
*************NSArray
排序是有顺序的*********************
NSArray
不可变oc数组
问:为什么要学习oc数组 ?
答:因为他比c语言数组强大 他可以放多种类型的对象,可以将文件内容转换成数组来进行分割或者显示
如何创建数组? oc数组时不能放nil
的 因为他的结束就是nil
注意
总结出来创建方法 NSString stringWithFmat: 类创建方法一般都是用类名开始的 其他类以此类推
//NSArray
创建方式
NSArray *array = [NSArray arrayWithObjects:@"jack",@"rose", nil];
//读取数组的个数
NSLog(@"%ld",array.count);
//打印第一个位置的数组元素
NSLog(@"%@",array[0]);
//快速创建数组
NSArray *array2 = @[@"jack",@"hei",@"hei"];
NSLog(@"%@",array2[2]);
//如何遍历数组里的每个对象
int count = 0;
//遍历数组的每个对象
for(id obj in array2)
{
count++;
}
NSLog(@"%d",count);
//直接打印数组他会打印出所有数组中的元素
NSLog(@"%@",array2);
-----------------------------------------------------------------------------------------
NSMutableArray
可变数组
//创建一个可变数组
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"hack",@"rose", nil];
//增加对象
[array addObject:@"123"];
//删除制定对象
[array removeObject:@"123"];
//删除制定位置的对象
[array removeObjectAtIndex:2];
-----------------------------------------------------------------------------------------
NSMutableSet *set = [NSMutalbeSet setWithObject:@"jack",@"rose",nil];
无序
//增加元素方法
[set addObject:@"lucy"];
//删除元素只能删除指定元素名称
不能删除指定位置 因为他时无序的
[set removeobject:@"rose"];
----------------------------
//
不可变数组不能使用快速创建
NSMutableArray *array = @[@"ack",@"rose"];
----------------------------
-----------------------------------------------------------------------------------------
总结:NSSet
和NSArray
比较
1>共同点
*都是集合,都能存放oc对象
*只能存放oc对象,不能存放非oc对象类型(基本数据类型:int,char,float等,结构体,枚举)
*本身都是不可变的,都有一个可变的子类
2>不同点
*NSArray
数组元素是有序的
*NSSet
是无序的
NSMutalbeSet
获取方法为
[set anyObject]
获取随机元素 返回NSString类型
NSString *str = [set anyObject];
------------------------------------------------------------------------------------------------
NSDictionary不可变
字典 排列没有顺序的
唯一key 不能有2个相同的key
如何出现后面写的将会覆盖之前写的
如果出现多个key
后面设置的会覆盖之前设置的
字典
问:问什么要学习NSDictionary ?
答:他很方便啦 例如讲 一个人的姓名 年龄 qq号 电话 性别 等等 完全可以利用字典来存储 然后放入NSArray中
搞成一个档案数据库 生活中也有很多例子 例如 在取款机 查询自己余额:他就会立刻显示你有多少钱
例如你查美女的电话号码 输入美女名字 立刻就会出来她的电话 等等 看你自己理解了
这里你要美女的号码 就代表key(索引) 而显示出来的号码入138138就表示value (内容)
他们是配对存在的 称为键值对 格式 一个key(唯一的) 独影一个value
key ---> value 称为键值对
索引 --->
文件内容
根据索引(key)就能找到对应的内容(value)
创建方法
//第一种方法
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack",@"name"];
//第二种方法
NSDictionary *dict = [NSDictionary dictionarywithObject:@"jack,@"name",@"rose",@"name2",nil];
//快捷创建方法只能用在NSDictionary
//格式 @{@"key" : @"value", @"key" : @"value"};返回NSDictionary类型
必要用在NSMutableDictionary
NSdictionary *dict = @{@"name" : @"jack", @"name2" : @"lucy"};
//获取方法
他返回的是id类型
id obj = [dict ObjectForKey:@"name"];
//获取方法2
id obj = dict[@"name"];
----------------------------------------------------------------------------------------------
NSMutableDictionary
可变字典 无序
//创建字典方法
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObject:@"jack" forKey:@"name"];
//增减一个键值对
[d setObject:@"hehe" forKey:@"name2"];
//删除指定key的键值对
[d removeObjectForKey:@"name"];
//获取键值
id obj = d[@"name"];
NSLog(@"%@,%ld",obj,d.count);
//创建字典方法
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObject:@"jack" forKey:@"name"];
//增加键值对
[d setObject:@"rose" forKey:@"name2"];
[d setObject:@"lucy" forKey:@"name3"];
//遍历之前
先把key 传给数组
然后在 然后通过数组
//数组是有序的
通过数组遍历得到key[i]
然后在读取key[i]得到value
//所以说NSArray和Dictionary是一个很好的组合
NSArray *key = [d allKeys];
for(int i = 0 ; i < d.count ; i++)
{
NSLog(@"%@==%@",key[i],d[key[i]]);
}
//当然直接打印 dictionary
也是可以现实全部内容的
NSLog(@"%@",d);
-----------------------------------------------------
快速遍历方法
无序
NSDictionary *dict = @{@"name" : @"jakc", @"name2" : @"rose", @"name3" : @"lucy"};
//快速遍历方法
无序
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
//打印key
和value
NSLog(@"%@--%@",key,obj);
//停止遍历
//*stop = YES;
}];
集合总结:
1.NSArray\NSMutalbeArray
数组 有序
*有序
*快速创建: @[]; mutalbearray没有快速
*快速读取方法:array[i];
2.NSSet\NSMutalbeSet
数组
*无序
3.NSDictionary\NSMutalbeDictionary字典
键值对
通过key 找到value
*无序
*快速创建(不可变): @{key : value, key2 : value};
*快速读取:字典名[key];
练习:
//创建一个有4个对象的数组
NSArray *person = @[
@{@"name1" : @"jack1" , @"qq1" : @"9821"},
@{@"name2" : @"jack2" , @"qq2" : @"9822"},
@{@"name3" : @"jack3" , @"qq3" : @"9823"},
@{@"name4" : @"jack4" , @"qq4" : @"9824"}
];
//用数组person
得到第二个字典
[2]
NSDictionary * j = person[1];
//打印对象的所有属性
NSLog(@"%@",j);
//利用字典对象读取key
调用value
NSLog(@"%@",j[@"qq2"]);
// 先利用 person[1]对应的指点
然后在用字典取出key对应的数据
NSLog(@"%@",person[1][@"qq2"]);
相关文章推荐
- 黑马程序员--NSDictionary的使用
- 黑马程序员——IO流
- 黑马程序员——正则
- 黑马程序员——反射机制
- 黑马程序员——Integer与int的种种比较你知道多少?
- 黑马程序员——多线程
- 黑马程序员——String
- 黑马程序员——面向对象三大特性
- 黑马程序员——继承和重写的区别
- 黑马程序员——异常
- 黑马程序员——集合
- 黑马程序员——面向对象笔记
- 黑马程序员--OC之类的封装继承多态使用技巧
- 黑马程序员--NSString
- 黑马程序员——Java单例设计模式
- 黑马程序员--OC的Foundation-结构体
- 黑马程序员--NSMutableArray的使用
- 《剑指Offer》面试题:超过数组长度的一半的数
- 黑马程序员--NSArray的使用
- 面试题:一数组arr,长度为len, 已知 0<=a<=b<len , 求 arr[b]-arr[a] 最大值?