`
chensl
  • 浏览: 57971 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA集合接口

阅读更多

集合接口,JAVA集合类库将接口与实现分离。下面以队列(queue)是如何分离的。

队列接口指出可以在队列的尾部添加元素,在队列的头部删除元素,并且可以查找队列中元素的个数,队列的特点是“先进先出”。一个队列接口的最小形式类似下面这样:

interface Queue<E> 
{
    void add(E element);
    E remove();
    int size();
}

 

上面的接口没有说明队列是怎么实现的,队列的实现一般有两种方式(1)使用循环数组,在Java SE 6中可以通过使用ArrayDeque实现 (2)使用链表,可以使用LinkedList实现。

当在程序中使用队列时,一旦构建了集合就不需要知道就行使用了哪种实现,因此,只有在构建集合对象时,使用具体的类才有意义。可以使用接口类型存放集合的引用。

Queue<Customer> expressLane = new CircularArrayQueue<Customer>(100);
expressLane.add(new Customer("Harry"));

 利用这种方式,一旦改变了想法,可以轻松的使用另外一种实现,只需要对调用构造器的地方作出修改,如改为LinkedListQueue实现

Queue<Customer> expressLane = new LinkedListQueue<Customer>();
expressLane.add(new Customer("Harry"));

为什么选择这种实现而不选择另外一种实现呢?循环数组要比链表更高效,然而,循环数组是一个有界集合,即容量有限,如果程序中要收集的对象数量没有上限,就最好用链表来实现。

另外在API文档中,还会发现一组名字以Abstract开头的类,例如AbstractQueue,这些类市委类库实现这而设计的,如果实现自己的队列类,扩展AbstractQueue要比扩展Queue接口更方便。

 

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

在Java类库中,集合类的基本接口是Collection接口,这个接口有两个基本方法。即

public interface Collection<E>
{
    boolean add(E element);
    Iterator<E> iterator();
    ……
}

 add方法用于向集合中添加元素,如果添加元素确实改变了集合就返回true,如果集合没有发生变化就返回false,例如在一个set中不允许有重复的对象,如果向set中再add一个已经存在的对象,那么这个请求就没有实效。

 iterator方法用于返回一个实现了Iterator接口的对象,可以使用这个迭代器对象依次访问结合中的元素。

迭代器Iterator

Iterator接口包含3个方法:

public interface Iterator<E>
{
    E next();
    boolean hasNext();
    void remove();
}

 

通过反复调用next()  方法,可以逐个访问集合中的每个元素,但是如果到达了集合的末尾,next方法将抛出一个NoSuchElementException异常。因此需要在next之前调用hasnext进行判断。下面实现访问集合中的所有元素:

Collection<String> c = . . .;
Iterator<String> iter = c.iterator();
while (iter.hasNext())
{
    String element = iter.next();
    do something with element
}

 

从Java SE5 开始,可以使用for each 循环

for (String element :c)
{
    do something with element
}

 

编译器简单的将“for each”循环翻译为带有迭代器的循环。“for each”循环可以与任何实现了Iterable接口的对象一起工作,这个接口只包含一个方法:

public interface Iterable<E>
{
    Iterator<E> iterator();
}

 Collection接口扩展了Iterable接口,因此,对于标准类库中的任何集合都可以使用“for each”循环。

元素访问的顺序取决于集合类型,对于Arraylist进行迭代,从索引0开始,对于HashSet中的元素,按照某种随机的次序出现。

删除元素

Iterable接口的remove方法将会删除上次调用next方法时返回的元素,所以如果想删除指定位置上的元素,需要越过这个元素,再调用删除指令,例如:

Iterator<String> it = c.iterator();
it.next(); // skip over the first element
it.remove(); // now remove it

 

next方法和remove方法的调用具有相互依赖性,如果调用remove之前没有调用next将是不合法的,会抛出一个IllegalStateException异常,例如,如果想删除两个相邻元素,不能直接的这样调用:

it.remove();
it.remove();  //error!  之前必须 添加一个 it.next();

 泛型实用方法

由于Colletion与Iterator都是泛型接口,可以编写操作任何集合类型的使用方法,如下:下面检测任意集合是否包含指定元素的泛型方法:

public static <E> boolean contains(Collection<E> c, Object obj)
{
for (E element : c)
if (element.equals(obj))
return true;
return false;
}

 

Collection接口中声明的类似的有用的方法还包括如下一些,所有实现类都必须提供这些方法的实现。

int size()
boolean isEmpty()
boolean contains(Object obj)
boolean containsAll(Collection<?> c)
boolean equals(Object other)
boolean addAll(Collection<? extends E> from)
boolean remove(Object obj)
boolean removeAll(Collection<?> c)
void clear()
boolean retainAll(Collection<?> c)
Object[] toArray()
<T> T[] toArray(T[] arrayToFill)

 为了方便的实现接口中以上的各类方法,Java类库提供了一个类AbstractCollection

 

分享到:
评论

相关推荐

    java技术集合体系图

    首先,"Collection.jpg"可能是一个展示了Java集合接口层次结构的图表。在Java集合框架中,Collection是最基础的接口,它是所有单一元素容器的超接口。Collection接口有两个主要子接口:List和Set。List接口代表有序...

    JAVA 1.7集合(接口)框架图

    涵盖几乎所有JAVA 1.7的集合框架(由1.7官网总结)

    java集合思维导图

    除了这些基本接口,还有`Collection`接口,它是所有集合接口的父接口,包含了集合的基本操作。`Map`接口则用来存储键值对,典型实现有`HashMap`、`TreeMap`、`LinkedHashMap`等。 Java集合框架还包含了一些工具类,...

    java自定义集合类

    1. **选择基类或接口**:首先,你需要决定你的自定义集合类将基于哪个Java集合接口或类。例如,如果你需要一个有序且可重复的元素集合,可能会选择基于`List`接口。如果你希望实现一个无序且不允许重复元素的集合,...

    java集合练习题.pdf

    Java 集合接口是 Java 语言中最基本的数据结构之一,它提供了多种类型的集合接口,如 Collection、List、Set、Map 等。 Collection 接口是所有集合接口的父接口,它定义了基本的集合操作,如 add、remove、contains ...

    java 集合

    本文将深入探讨Java集合框架的基础知识,包括接口、类、以及它们在实际开发中的应用。 首先,Java集合框架由一系列接口和实现这些接口的类组成。主要的接口有`List`、`Set`和`Queue`,它们各自代表了不同特性的数据...

    Java集合案例及源代码.rar

    1. **Java集合接口**: - **List**:有序的、允许重复元素的集合,如ArrayList和LinkedList。 - **Set**:不允许重复元素的集合,如HashSet和TreeSet。 - **Queue**:先进先出(FIFO)的数据结构,如LinkedList...

    java泛型集合 java集合 集合 java Collection

    Java集合框架是一个包含多种数据结构(如列表、集、队列等)的API,这些数据结构由接口(如`Collection`、`List`、`Set`和`Queue`)和实现这些接口的类(如`ArrayList`、`HashSet`和`LinkedList`)组成。`Collection...

    Java集合排序及java集合类详解

    Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的接口和类。在本篇中,我们将深入探讨Java集合的排序机制以及集合类的详细使用。 首先,我们来了解一下Java集合的基本分类。Java...

    java 接口练习作业

    Java集合框架包括List、Set、Queue等接口,它们定义了对数据进行操作的一系列规范。例如,`List`接口代表有序的、可重复的元素集合,提供了添加、删除、查找和遍历元素的方法。常见的实现类有ArrayList和LinkedList...

    Java集合排序及java集合类详解.pdf

    Collection是Java集合框架中最重要的接口之一,它是所有单列集合的根接口。 ##### 1.2 Collection - **常用方法**: - `add(E e)`:向集合添加一个元素。 - `remove(Object o)`:从集合中移除指定元素。 - `...

    Java集合框架总结

    - **集合接口**:主要包括`Collection`、`Set`、`List`和`Map`等接口。 - **抽象类**:提供了部分接口的默认实现,如`AbstractCollection`、`AbstractList`、`AbstractSet`和`AbstractMap`。 - **实现类**:具体实现...

    Java基础篇:Java集合.pdf

    该文档主要详细总结了Java集合的相关知识,包括Collection和Map接口、Collection接口的子接口List和Set接口以及具体的实现类、存储原理等;Map接口的子接口HashMap、LinkedHashMap、TreeMap、Properties等

    java 集合部分笔记

    【Java集合】 Java集合框架是Java编程语言中用于存储和操作对象的工具,它提供了多种数据结构,如列表、集、映射等,以适应不同的数据处理需求。集合类通常位于`java.util`包下,是Java程序员必备的知识点。 1. **...

    Java集合思维导图.xmind.zip

    Java集合框架是Java编程语言中不可或缺的一部分,它提供了一组高效的数据结构和算法,使得开发者可以方便地存储和管理对象。这份"Java集合思维导图.xmind.zip"压缩包文件,显然旨在帮助学习者深入理解Java集合框架的...

    Java集合详解,详细讲解java的集合类

    Collection是最基本的集合接口,它代表一组Object,即它的元素。Collection接口定义了一些基本操作,如add、remove和contains等。同时,Collection接口提供了iterator()方法,使得可以通过迭代器遍历集合中的每个...

    【Java】Java集合框架思维导图。

    xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...

    一个讲解很清晰的Java集合框架PPT

    Java集合框架是Java编程语言中不可或缺的一部分,它提供了一组接口和类,用于高效地存储、管理和操作数据。这个“一个讲解很清晰的Java集合框架PPT”显然是一个对外公开的教育资源,旨在帮助学习者深入理解Java集合...

Global site tag (gtag.js) - Google Analytics