提交 19460da8 编写于 作者: W wizardforcel

ch1.

上级 39bbbd08
# 第一章 接口
本书展示了三个话题:
+ 数据结构:从 Java 集合框架(JCF)中的结构开始,您将学习如何使用列表和映射等数据结构,您将看到它们的工作原理。
+ 算法分析:我提供了技术,来分析代码以及预测运行速度和需要多少空间(内存)。
+ 信息检索:为了激发前两个主题,并使练习更加有趣,我们将使用数据结构和算法构建简单的 Web 搜索引擎。
以下是话题顺序的大纲:
+ 我们将从`List`接口开始,你将编写实现这个接口的两种不同的方式。然后我们将您的实现与 Java `ArrayList``LinkedList`类进行比较。
+ 接下来,我将介绍树形数据结构,您将处理第一个应用程序:一个程序,从维基百科页面读取页面,解析内容,并遍历生成的树来查找链接和其他特性。我们将使用这些工具来测试“到达哲学”的猜想(您可以通过阅读 <http://thinkdast.com/getphil> 来了解)。
+ 我们将了解 Java 的`Map`接口和`HashMap`实现。然后,您将使用哈希表和二叉搜索树来编写实现此接口的类。
+ 最后,您将使用这些(以及其他一些我之前介绍的)类来实现一个 Web 搜索引擎,其中包括:一个查找和读取页面的爬虫程序,一个存储网页内容的索引器,以便有效地搜索,以及一个从用户那里接受查询并返回相关结果的检索器。
让我们开始吧。
## 1.1 为什么有两种`List`?
当人们开始使用 Java 集合框架时,有时候会混淆`ArrayList``LinkedList`。为什么 Java 提供两个`List interface`的实现呢?你应该如何选择使用哪一个?我们将在接下来的几章回答这些问题。
我将以回顾`interface`和实现它们的类开始,我将介绍“面向接口编程”的概念。
在最初的几个练习中,您将实现类似于`ArrayList``LinkedList`的类,这样你就会知道他们如何工作,我们会看到,他们每个类都有优点和缺点。对于`ArrayList`,一些操作更快或占用更少的空间;但对于`LinkedList`其他操作更快或空间更少。哪一个更适合于特定的应用程序,取决于它最常执行的操作。
## 1.2 Java 中的接口
Java `interface`规定了一组方法;任何实现这个`interface`的类都必须提供这些方法。例如,这里是`Comparable`的源代码,它是定义在`java.lang`包中的`interface`
```java
public interface Comparable<T> {
public int compareTo(T o);
}
```
这个`interface`的定义使用类型参数`T`,这使得`Comparable`是个泛型类型。为了实现这个`interface`,一个类必须:
+ 规定类型`T`,以及,
+ 提供一个名为`compareTo`的方法,接受一个对象作为参数,并返回`int`
例如,以下是`java.lang.Integer`的源代码:
```java
public final class Integer extends Number implements Comparable<Integer> {
public int compareTo(Integer anotherInteger) {
int thisVal = this.value;
int anotherVal = anotherInteger.value;
return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
}
// other methods omitted
}
```
> 译者注:根据[`Comparable<T>`的文档](http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html#compareTo%28T%29),不必要这么复杂,直接返回`this.value - that.value`就足够了。
这个类扩展了`Number`,所以它继承了`Number`的方法和实例变量;它实现`Comparable<Integer>`,所以它提供了一个名为`compareTo`的方法,接受`Integer`并返回一个`int`
当一个类声明它实现一个`interface`,编译器会检查,它提供了所有`interface`定义的方法。
除此之外,这个`compareTo`的实现使用“三元运算符”,有时写作`?:`。如果您不熟悉,可以阅读 <http://thinkdast.com/ternary>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册