AP计算机教程7-2:interface List
什么是interface?
你可能在日常生活中经常见到USB口(USB interface)。不论是优盘、移动硬盘、数码相机还是手机都会用到这种接口。USB口可以让你把外部设备和电脑连接起来以双向传输数据或文件。在使用完成之后,可以将设备弹出并拆下连接线,有必要时再连上新的设备。
在Java中,interface可以被视为一种特殊的class,里面一般只有public abstract
method。abstract
method仅有签名而没有具体的代码实现。在定义好interface之后,你就确定了某个class为实现(implement)这个interface需要完成哪些工作。对于interface List
而言,它的某个实现要能够在列表中添加元素、删除元素、获取指定索引的元素等等。思路是为了将某个class的object所能完成的工作,和具体由谁(哪个class)来完成分离开。这样一来,你就可以创建一系列的class来实现同一个interface,然后按需选用。你可以在程序中接驳不同的class,就像你在电脑上插入不同的USB设备那样。
interface与合同
你还可以把interface想成一种合同。实现某个interface的class同意为interface中定义的method提供对应的代码。想象某个公司为自己的产品设计了interface,规定了其拥有的一系列功能,代工厂则可以提供不同的方案来实现这些功能。你可以选用不同的代工厂的实现方案,因为就同一个interface而言所涉及的method均是一致的。按照你自己的使用场景,可以从一个解决方案切换到另外一个,直至找到最合适的。能够在不修改代码的前提下切换class使得interface变得极为有用。
考试中的List
method
以下是你在AP计算机科学A考试中会用到的List
method。它们也会在AP计算机科学考试的快速参考中提供。
int size()
返还列表中元素的个数boolean add(E obj)
在末尾添加obj
,返回true
void add(int index, E obj)
在位置index
插入obj
,之后元素后移一位,index
需小于总长E get(int index)
获得列表中指定索引所对应的元素E set(int index, E obj)
在位置index
替换obj
,返回被替换掉的元素E remove(int index)
删除位置index
的元素并返回,之后元素前移一位
注意到interface List
的add
method只接受object并将其加入列表中。列表只能存储object而非像double
或者int
之类的基本变量。所有这些基本变量必须通过自动装箱(autoboxing)的过程来转换成Java object。int
对应Integer
、double
对应Double
等等。
为何使用列表?
我们之前刚学了数组,那么为什么在某些情况下列表相对数组更有优势呢?事实上为了把元素存放到数组里,需要先对元素的数目有大致的估计。假定你已经创建了一个长度为5的数组,想要加入第6个元素时会发生什么事?你就不得不创建一个更大的数组,再将老元素一一复制过去并把新元素追加在最后。新数组的大小又应该设为多少呢?如果是6的话暂时不会浪费更多空间,但是如果之后还要再追加元素的话就又得重复“创建/复制”这个过程。如果你新建了一个更大的数组(一般为原来数组大小的两倍),你又得另行记录数组中到底存有多少个有效元素,因为这样一来数组大小和元素数目就不一致了。
0 条评论