java接口与集合_Java中的集合(一)——集合接口

集合的接口与实现分离

Java中的集合遵循接口与实现分离的原则,接口描述集合类要实现的功能,而具体的类则实现(implements)集合接口。同时,Java集合的接口和实现类都是范型的,范型编程最基本(原始)的功能就是用来实现集合的。利用范型,在只编写一套代码的情况下集合可以保存不同类型的对象。

下面研究一个具体的集合类Queue,其接口描述为:

interface Queue

{

void add(Element e);

E remove();

int size();

}

集合类可以有多个不同的实现,Queue可以使用循环数组实现也可以使用链表实现,具体的选择可以根据需求的不同来确定。一种实现为:

class CircualArrayQueue implements Queue

{

//必须实现接口描述中描述的方法

}

在程序中使用集合类时,只需要在构建集合对象时关注不同的集合实现,一旦构建完毕就可以使用集合接口类型引用集合对象。表现为:

Queue queues=new CircualArrayQueue();或者

Queue queues=new LinkedListQueue()

另外在Java API文档中,有一些以Abstract开头的抽象集合类,类似于AbstractQueue,这种抽象集合类主要用于用户想要自己实现集合类时使用。(抽象类与接口的区别对比。)

Java类库中的集合接口和迭代器接口

J  ava集合中的基本接口是Collection接口,接口如下:

public interface Collection

{

boolean add(E element);

Iterator iterator();

//还有其他方法

…………

}

add方法用于向集合中添加对象,如果添加成功返回true,否则返回false。如果要插入的对象已经存在,则不会插入对象,集合中不能有重复的对象。Iterator方法返回实现了Iterator接口(迭代器接口)的对象,利用这个对象可以遍历集合中的对象。

迭代器接口描述如下:

public interface Iterator

{

E next();

boolean hasNext();

void remove();

}

集合的迭代器中的next方法可以按照顺序返回集合中的元素,当已经访问到结合结尾时,再调用next()方法会抛出NoSuchElementException异常,因此使用next方法是要先判定hasNext是否为True。

在Java SE 5.0之后,可以使用更简单的方式遍历集合:

for(E element:collection)

{

//do something to element

}

编译器简单的将其翻译成对集合迭代器的操作。要使用这个机制,需要结合对象实现了Iterable接口:

public interface Iterable

{

Iterator iterator();

}

Collection接口扩展了Iterable接口,因此标准库中的任何集合都可以使用这一形式。

需要注意的是,java集合类库中的迭代器与其他迭代器不同,传统的迭代器(例如STL中的迭代器)使用数组索引建模,可以直接利用类似于i++这样的操作使迭代器指向下一个位置,不需要真的移动迭代器。但是java中的迭代器要指向下一个位置必须移动迭代器,使用next操作时候迭代器才会指向下一个位置。这一特性在删除集合中元素是需要注意。例如当需要删除相邻的两个元素时使用:it.remove();it.remove()是错误的。需要先调用next:it.remove();it.next();it.remove()。

因为集合接口都是范型的,因此可以编写操作各种类型的集合元素的方法。Collection接口中除了基本的两个操作外还提供了许多实用的范型方法。要实现Collection接口中的每一个范型方法没有必要,因此java中提供了抽象类AbstractCollection来实现许多的范型方法,但是将size和iterator两个方法抽象化了。这个类实现了Collection接口,然后可以使用各种具体类来继承这个抽象类从而实现具体的集合类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值