NSArray数组与Java数组的区别|青训营笔记

228 阅读3分钟

这是我参与「第四届青训营-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];

数组声明创建

image.png

//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类的常用功能

  1. 通过fill方法给数组赋值。
  2. 通过sort方法按升序对数组排序。
  3. 通过equals方法比较数组。
  4. 通过binarySearch方法查找数组元素。

引用:juejin.cn/post/698545…

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)];

引用:juejin.cn/post/712271…

NSArray查询

  • 通过数组元素找下标(indexOfObject)
  • 判断数组中是否包含某个元素(containsObject)

注意:数组的查询都是针对对象指针的,也就是如果你拿另外一个虽然是同样内容的字符串查询,但因为不是同个对象,也会有查询不到的情况。

引用:juejin.cn/post/712271…

3.总结

总的来说,NSArray对象一旦创建了就没有办法修改,与java数组相比,java数组在创建后,数组的大小、长度也是不可以改变的。但是java数组中有add()、remove(),这一点与NSArray不同但是与NSMutableArray相似。