黑马程序员___Foundation__集合

NSArray

NSArray的创建

NSArray *array = [NSArray arrayWithObject:@“jack”]   创建单个元素

NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil] 创建多个元素

快速创建一个NSArray对象

NSArray *array4 = @[@"jack", @"rose", @"4324324"]

[array.count ]   计算数组元素的个数

array3[0]

[array3 objectAtIndex:1]  访问数组的元素

注意:OC数组不能存放nil值,nil是数组的结束标记

OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等

NSArray *array = [NSArray array] 这个数组永远是空数组

遍历数组

方法一、

Person *p = [[Person alloc] init];

    NSArray *array = @[p, @"rose", @"jack"];

       for (int i = 0; i<array.count; i++)

       {

            NSLog(@"%@", array[i]);

       }

方法二、

 id obj代表着数组中的每一个元素

    int i = 0;

        for (id obj in array)

        {

            // 找出obj元素在数组中的位置

            NSUInteger i = [array indexOfObject:obj];

            NSLog(@"%ld - %@", i, obj);

            //i++;

            if (i==1)

            {

                break;

            }

        }

方法三、

 [array enumerateObjectsUsingBlock:

     // 每遍历到一个元素,就会调用一次block

     // 并且当前元素和索引位置当做参数传给block

     ^(id obj, NSUInteger idx, BOOL *stop)

     {

         NSLog(@"%ld - %@", idx, obj);

         if (idx == 0)

         {

             // 停止遍历

             *stop = YES;

         }

     }];

NSMutableArray

创建数组

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]

添加元素

[array addObject:[[Person alloc] init]];

[array addObject:@"jack"];

删除元素

[array removeAllObjects]

删除指定的对象

[array removeObject:@"jack"];

[array removeObjectAtIndex:0];

NSSet

创建

NSSet *s = [NSSet set]

NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil]

随机拿出一个元素

NSString *str =  [s2 anyObject];

NSLog(@"%@", str);

NSMutableSet

NSMutableSet *s = [NSMutableSet set];

添加元素

[s addObject:@"hack"];

删除元素

[s removeObject:<#(id)#>];

NSSet和NSArray的对比

1 共同点

1) 都是集合,都能存放多个OC对象

2)只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)

3)本身都不可变,都有一个可变的子类

2 不同点

NSArray有顺序,NSSet没有顺序

NSDictionary

字典都是由索引(key)和文字内容组成的(value)

创建不可变字典

方式一、

NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

方式二、

NSArray *keys = @[@"name", @"address"];

NSArray *objects = @[@"jack", @"北京"];

NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

方式三、

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:

@"jack", @"name",

@"北京", @"address",

@"32423434", @"qq", nil];

快速创建一个字典

NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};

取出字典某个对象

id obj = [dict objectForKey:@"name"]

快速取出字典某个对象

id obj = dict[@"name"]

可变字典 NSMutableDictionary

NSMutableDictionary *dict = [NSMutableDictionary dictionary]

添加键值对

[dict setObject:@"jack" forKey:@"name"];

移除键值对

[dict removeObjectForKey:@“name”];

遍历字典

方法一、

  NSArray *keys = [dict allKeys];

        for (int i = 0; i<dict.count; i++)

        {

            NSString *key = keys[i];

            NSString *object = dict[key];

            NSLog(@"%@ = %@", key, object);

        }

方法二、

 [dict enumerateKeysAndObjectsUsingBlock:

     ^(id key, id obj, BOOL *stop) {

         NSLog(@"%@ - %@", key, obj);

         // *stop = YES;

     }];
时间: 2024-10-23 15:06:11

黑马程序员___Foundation__集合的相关文章

黑马程序员_集合

集合1.集合和对象数组的区别: 数组的长度不可变,集合的可变: 数组可以存储基本数据类型和对象,集合只能存储对象. 集合的框架图 集合派系的顶层接口Collection1.Collection集合存储对象的方法: add(E e)将元素存储到集合中 addAll(Collection c)将一个集合添加到另外的集合中2.Collection集合提取对象的方法: 通过迭代器iterator中的方法:hasNext()和next()来取出 Iterator it=new iterator(); wh

黑马程序员_Java集合框架

- - - - - android培训.java培训.期待与您交流! - - - - - - 集合框架:用于存储数据的容器. 特点: 对象封装数据,对象多了也需要存储.集合用于存储对象. 对象的个数确定可以使用数组.如果不确定可以用集合.因为集合是可变长度的. 集合和数组的区别: 数组是固定长度的:集合可变长度的. 数组可以存储基本数据类型,也可以存储引用数据类型:集合只能存储引用数据类型. 数组存储的元素必须是同一个数据类型:集合存储的对象可以是不同数据类型. 数据结构:就是容器中存储数据的方

黑马程序员——Java集合工具类和泛型

Collections工具类和泛型 Collections和Collection Collections和Collection是不同的,Collections是工具类,用来操作集合的,而Collection是集合接口.Collections中有一系列的静态方法用来操作集合,但是不能更改集合内容.比如不能set()不能remove()元素,可以替换全部元素或者添加同一个元素. static List<String> list =Arrays .asList("one Two three

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

黑马程序员——Java集合基础知识之Collection

集合基础知识--Collection Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成. List接口的功能方法 List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素.List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低.常用实现类有ArrayList,LinkedList. Lis

黑马程序员---Java集合框架

---------------------- Android开发.java培训.期待与您交流! ---------------------- Java集合框架 集合我们都知道是用来储存对象的容器,那之前的数组不也可以储存对象么,为什么要出现集合呢? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,然而集合类中提供很多方便操作对象存储的方法,要比数组更容易操作对象,而且集合的长度是可变的,然而数组长度确实固定不变的,这样不利于对对象的间隔储存.  数组和集

黑马程序员__集合框架总结

------Java培训期待与您交流! ------- 前言: 本文是对Java集合框架做了一个概括性的解说,目的是对Java集合框架体系有个总体认识,如果你想学习具体的接口和类的使用方法,请参看Java API文档. 一.概述 数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口

黑马程序员——JAVA集合框架学习总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- www.itheima.com 要学好java的集合框架,必须掌握此图: Java集合框架很全面,从大的来说.它包括两种类型: 1.一种是以collection为根接口的集合. 2.另一种是由map为根接口的<key,value>的“图”. 而collection之下的set接口和list接口又有不同: 1.Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制.

黑马程序员——java集合框架(Map和工具类)

1.Map体系下有三个子类: HashMap    底层是哈希表数据结构,可以存入null键和null值,不同步---TreeMap    底层是二叉树数据结构,线程同步,可以用于给map集合中的键进行排序 和Set很像,Set底层是Map  添加元素时,如果出现相同键,那么厚添加的值会覆盖原有键对应的值,并且put方法会返回被覆盖的值 2.map集合的两种取出方式:  (1) keySet():将map中所有的键存入到Set集合,因为set具备迭代器                 可以以迭代