如何向数组中添加对象

如何向数组中添加对象,第1张

试一下以下代码,a到c,a是要找重复数据的List,里面都是a的重复数据,只出现一次的已经过滤掉了。如果c里面的数据要求不重复,把ArrayList换成HashSet就行了。

List a = new ArrayList()

a.add("123")

a.add("123")

a.add("123")

a.add("123")

a.add("456")

a.add("789")

a.add("123")

Set b = new HashSet()

ArrayList c = new ArrayList()

for (int i = 0i <a.size()i++) {

Object x = a.get(i)

if (b.contains(x)) {

c.add(x)

}

b.add(x)

}

可以通过以下方法实现面向对象:

1、封装

封装就是把数据和方法打包到一个类里面。其实C语言编程者应该都已经接触过了,C 标准库 中的 fopen(), fclose(), fread(), fwrite()等函数的 *** 作对象就是 FILE。

数据内容就是 FILE,数据的读写 *** 作就是 fread()、fwrite(),fopen() 类比于构造函数,fclose() 就是析构函数。

2、继承

继承就是基于现有的一个类去定义一个新类,这样有助于重用代码,更好的组织代码。在 C 语言里面,去实现单继承也非常简单,只要把基类放到继承类的第一个数据成员的位置就行了。

例如,我们现在要创建一个 Rectangle 类,我们只要继承 Shape 类已经存在的属性和 *** 作,再添加不同于 Shape 的属性和 *** 作到 Rectangle 中。

3、多态 C++

语言实现多态就是使用虚函数。在 C 语言里面,也可以实现多态。 现在,我们又要增加一个圆形,并且在 Shape 要扩展功能,我们要增加 area() 和 draw() 函数。

但是 Shape 相当于抽象类,不知道怎么去计算自己的面积,更不知道怎么去画出来自己。而且,矩形和圆形的面积计算方式和几何图像也是不一样的。

4、虚表和虚指针

虚表(Virtual Table)是这个类所有虚函数的函数指针的集合。

虚指针(Virtual Pointer)是一个指向虚表的指针。这个虚指针必须存在于每个对象实例中,会被所有子类继承。

5、在构造函数中设置vptr

在每一个对象实例中,vptr 必须被初始化指向其 vtbl。最好的初始化位置就是在类的构造函数中。

事实上,在构造函数中,C++ 编译器隐式的创建了一个初始化的vptr。在 C 语言里面, 我们必须显示的初始化vptr。下面就展示一下,在 Shape 的构造函数里面,如何去初始化这个 vptr。

当OC的可变数组(NSMutableArray)添加 nil 对象时,首先会d出警告 “Null passed to a callee that requires a non-null argument”,也就是说数组不能传递非空参数。

提示信息如下:

运行后会崩溃,崩溃信息如下:

当OC的不可变数组(NSArray)字面量方法添加nil对象时,会报错“Collection element of type 'void *' is not an Objective-C object”

报错界面如下:

当用arrayWithObjects/initWithObjects时,末尾都会有个nil,因为数组元素不确定,因此要加nil,同时此时的nil也是数组结束的标识符

当这种写法的时候 NSArray *array = [NSArray arrayWithObjects:@"1",@"2",nil,@"3"]会提示“Missing sentinel in method dispatch”,也就是提示缺少nil来结束数组

当fix后会变成如下,但是数组array是以第一个nil结束的,也就是说3并不是数组中的元素


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11699771.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存