Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
think-dast-zh
提交
19460da8
T
think-dast-zh
项目概览
OpenDocCN
/
think-dast-zh
8 个月 前同步成功
通知
0
Star
26
Fork
13
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
think-dast-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
19460da8
编写于
9月 02, 2017
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ch1.
上级
39bbbd08
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
63 addition
and
0 deletion
+63
-0
1.md
1.md
+63
-0
未找到文件。
1.md
0 → 100644
浏览文件 @
19460da8
# 第一章 接口
本书展示了三个话题:
+
数据结构:从 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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录