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 }

每次对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);
    }
}

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);
}

索引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)
}

 

时间: 2024-10-11 04:48:04

Java数据结构之Java Collections API中的表的相关文章

Java数据结构学习—Collections类

java.util 类 Collections java.lang.Object java.util.Collections public class Collections extends Object 此类完全由在 collection 上进行操作或返回 collection 的静态方法组成.它包含在 collection 上操作的多态算法,即"包装器",包装器返回由指定 collection 支持的新 collection,以及少数其他内容. 如果为此类的方法所提供的 colle

数据结构在Java中的用法(持续更新...)

今天做了Medallia公司的Java面试题,发现用惯了C/C++之后对Java感到异常地不适应,特别是对数据结构在Java中如何使用感到十分头疼,于是开始整理并练习Java API里头关于数据结构的使用方法.甲骨文的Java API对每一种数据结构只提供解释但没有提供相关的例子,很不方便,因为大多数时候我们都是通过读例子来学习用法,这也是我学C++觉得最有用的方法. Vector 甲骨文API:"The Vector class implements a growable array of o

Java基础----Java API中的常用类

System:描述系统的一些信息 preperties();获取系统信息 Properties prop =new System.getProperties(); 是hashtable 的子类.用map的方法去除该类集合中的元素.该集合中存储的都是字符串,没有泛型定义. String calue=(String)prop.get(obj); System.out.println(obj+":"+value); //如何在系统中自定义一些特有信息? System.setProperty(

关于Java Collections API您不知道的5件事,第2部分

注意可变对象 java.util 中的 Collections 类旨在通过取代数组提高 Java 性能.如您在 第 1 部分 中了解到的,它们也是多变的,能够以各种方 式定制和扩展,帮助实现优质.简洁的代码. Collections 非常强大,但是很多变:使用它们要小心,滥用它们会带来风险. 1. List 不同于数组 Java 开发人员常常错误地认为 ArrayList 就是 Java 数组的替代品.Collections 由数组支持,在集合内随机查找内容时性能较好. 与数组一样,集合使用整序

java 静态导入、System类、Date类、Runtime类、Calendar类、Collections类中的shuffle方法、Math类

/* JDK1.5版本新特性(续):静态导入 注意:当类名重名时,需要指定具体的包名: 当方法名重名时,需要指定具体的类名. */ import java.util.*; import static java.util.Arrays.*;//导入Arrays工具类中的所有静态成员. import static java.lang.System.*;//导入了System类中所有的静态成员,注意System类中的成员都是静态的. class StaticImport { public static

Java数据结构与排序

一.引子:想要给ArrayList排序却发现没有排序方法?你有两种选择:        1.换用TreeSet:     2.使用Collection.sort(List<T> list) / Collection.sort(List<T> list, Comparator<? super T> c)方法. 二.展开分析Java的几种主要数据结构及其排序方法: LinkedList 高效操作元素 TreeSet  不重复,有序 HashSet 不重复,快速查找 Hash

Java 容器在实际web项目中应用

前言:在java开发中我们离不开集合数组等,在java中有个专有名词:"容器" ,下面会结合Thinking in Java的知识和实际开发中业务场景讲述一下容器在Web项目中的用法.可结合图片代码了解Java中的容器 备注 :这个地方 ,参考于朝向远方的博客Java容器详解,既然前人总结的这么好,我就直接拿来用,在这里更注重在实际开发中的例子,感谢那些总结的前辈们,辛苦了. 简单的数组例子 Thinking in Java 中并没有把数组归为Java的容器,实际上数组的确不是Java

Java数据结构与算法之集合

线性表.链表.哈希表是常用的数据结构,在进行Java开发时,SDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中. 一.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object.一些Collection允许相同元素而另一些不行.一些能排序而另一些不行.Java  SDK不提供直接继承自Collection的类,Java  SDK提供的类都是继承自Collection的"子接口"如List和Set

Java 5 、6、 7中新特性

JDK5新特性(与1.4相比)[转] 1 循环 for (type variable : array){ body} for (type variable : arrayList){body} 而1.4必须是: for (int i = 0; i < array.length; i++){ type variable = array[i];    body} for (int i = 0; i < arrayList.size(); i++){type variable = (type) ar