Java数据结构之Java Collections API中的表

1.Collection接口

位于java.util包中,以下是重要的部分。

1  public interface Collection<AnyType> extends Iterable<AnyType> 
2  { 
3       int size();
4       boolean isEmpty();
5       void clear();
6       boolean add(AnyType x);
7       boolean remove(AnyType x);
8       java.util.Iterator<AnyType> iterator();
9  }

Collection接口扩展了Iterable接口。实现Iterable接口的哪些类可以拥有增强的for循环,该循环施于这些类之上以观察它们所有的项。

增强for循环示例:该print可以用来打印任意集合中的所有项。

1 public static <AnyType> void print(Collection<AnyType> coll)
2 {
3     for(AnyType item : coll){
4         System.out.println(item);
5     }
6 }

2.Iterator接口:(个人认为这里迭代器就隐约有着C中指针的意味了)

  实现Iterable接口的结合必须提供一个称为iterator的方法,该方法返回一个Iterator类的对象。

1 public interface Iterator<AnyType>
2 {
3     boolean hasNext();
4     AnyType next();
5     void remove();
6 }
View Code

每次对next的调用都给出集合尚未见到的下一项。第一次调用给出第一项。

编译器见到增强for循环会对其改写成使用迭代器的形式。如被编译器重写的print例子。

 public static <AnyType> void print(Collection<AnyType> coll)
 {
    Iteraror<AnyType> itr = coll.iterator();
    while(itr.hasNext()){
        AnyType item = itr.next();
        system.out.println(item);
    }     
}
View Code

Iterator接口的remove方法和Collection接口的remove方法:

  Collection接口的remove方法:

    必须要找到被删除的项,涉及到开销问题。

  Iterator接口的remove方法:

    可以删除由next最新返回的项(即迭代器刚刚遍历过的项),此后我们不能再调用该remove方法,直到对next再一次调用后。

  当直接使用Iterator(而不是使用增强for循环)时,如果对正在被迭代的结合进行结构上的改变(即对该集合使用add、remove、clear方法),那么迭代器将不再合法抛出异常。但是如果迭代器调用了它自己的remove方法,那么仍旧是合法的。

3.List接口

java.util包中,继承Collection接口。以下仅列举重要的方法。

public interface List<AnyType> extends Collection<AnyType>
{
    AnyType get(int idx);
    AnyType set(int idx, AnyType newVal);
    void add(int idx, AnyType x);
    void remove(int idx);
    
    ListIterator<AnyType> listIterator(int poss);
}
View Code

索引0位于表前段,size()-1代表表最后一项。List是一个接口,而List ADT有两种流行的实现方式:ArrayList(可增长数组实现)和LinkedList(双链表实现)。对于搜索而言,ArrayList和LinkedList都是低效的,均花费线性时间(二叉平衡搜索树则花费O(logN)时间)。

ListIterator接口:

  扩展了Iterator的功能,添加了previous()和hasPrevious()。add()方法将一个新的项以当前位置放入表中。set()方法改变被迭代器看到的最后一个值。从而对LinkedList很方便。

public interface ListIterator<AnyType> extends Iterator<AnyType>
{
    boolean hasPrevious();
    AnyType previous();
    
    void add(AnyType x);
    void set(AnyType newVal)
}
View Code

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。