这是我参与「第四届青训营-iOS客户端」笔记创作活动的第四天。本篇文章将围绕介绍java数组与NSArray数组,并且进行比较。
1.java数组
数组是同一类型的多个项的连续存储。可以使用index将值存储在数组中,并且从中获取值。数组就像一排储物柜,只不过你不能把很多东西塞进去。每个数组的index只能存储一个值,它类似于储物柜编号,并且可以帮助你找到一个特定的地方来存放和检索你的东西。
声明数组
声明一个数组时,要先指定存储在数组中的元素的类型,并且用([ ])表示它是一个该类型的数组,然后至少要有一个空格,显示数组的名称。下面的声明只是命名了变量,并说明了它将引用什么类型的数组。 这些声明并没有创建数组。在Java中,数组是对象,所以任何声明数组的变量都持有对一个对象的引用。如果数组还没有被创建,而你试图运行出该变量的值,它将为null,也就是说它还没有引用任何对象。
public class declaringArray{
public static void main(String[] args){
int[] scores = null;
String[] names = null;
System.out.println(scores);
System.out.println(names);
}
}
在这段代码中,运行出的scores和names都是null因为数组还没有被创建。在java中如果要要创建一个数组,要使用new关键字然后后面跟上类型,最后在方括号里写上数组的大小。
scores = new int[3];
names = new String[5];
数组声明创建
//set the values in the scores array
scores[0] = 12;
scores[1] = 13;
scores[2] = 14;
scores[3] = 15;
//scores = new int[3];
System.out.println(scores[3]);
数组的四个特点:
- 当数组创建后,数组的大小、长度是不可以改变的。
- 数组中的元素必须是相同的类型,不可以混合类型。
- 数组中的元素可以是任意类型,包括基本类型和引用类型
- 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的变量成员。
arrays类的常用功能:
- 通过fill方法给数组赋值。
- 通过sort方法按升序对数组排序。
- 通过equals方法比较数组。
- 通过binarySearch方法查找数组元素。
arrays类的常用方法:
有add、remove等方法。
2.NSArray数组
简写:使用@+方框 就相当于创建一个NSArray对象。
NSArray特点:
- 创建成功后,内容不可变。
- NSArray中不能存放 int, float, bool 等基本类型,只能保存Objective-C对象。
- NSArray是一个不可变数组类。
NSArray常用方法:
只有NSMutableArray有add、insert、remove等方法,NSArray没有。
NSArray的定义赋值:
- 创建一个里面有一个或多个元素的不可变数组。
- nil只能出现在数组的最后,nil是NSArray的结束标志。
// 空数组
NSArray *arr1 = [NSArray array];
// 效果同上
NSArray *arr2 = [[NSArray alloc] init];
// @[...] = NSArray对象创建
NSArray *arr3 = @[@"iOS", @"Android", @"Server"];
// 效果同上
NSArray *arr4 = [NSArray arrayWithObjects:@"iOS", @"Android", @"Server"];
// 如果需要放基本类型,可使用NSNumber or @(value) = 自动转成NSNumber对象
NSNumber *numberObject = [[NSNumber alloc] initWithInt:100];
NSArray *arr4 = [NSArray arrayWithObjects:@(123), numberObject];
// 限制存放对象为NSNumer
NSArray<NSNumber *> *numberArrayObject = @[@(1), @(-1), @(3.3)];
NSArray查询
- 通过数组元素找下标(indexOfObject)
- 判断数组中是否包含某个元素(containsObject)
注意:数组的查询都是针对对象指针的,也就是如果你拿另外一个虽然是同样内容的字符串查询,但因为不是同个对象,也会有查询不到的情况。
3.总结
总的来说,NSArray对象一旦创建了就没有办法修改,与java数组相比,java数组在创建后,数组的大小、长度也是不可以改变的。但是java数组中有add()、remove(),这一点与NSArray不同但是与NSMutableArray相似。