Skip to Content
学习 Java,第 6 版
book

学习 Java,第 6 版

by Marc Loy, Patrick Niemeyer, Daniel Leuck
May 2025
Intermediate to advanced
552 pages
7h 22m
Chinese
O'Reilly Media, Inc.
Content preview from 学习 Java,第 6 版

第 7 章 集合与泛型 集合与泛型

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

当我们开始利用不断增长的对象知识来处理越来越多有趣的问题时,一个经常出现的问题就会出现。在解决这些问题的过程中,我们如何存储所操作的数据?我们肯定会使用各种不同类型的变量,但我们也需要更大、更高级的存储选项。我们在"数组 "中讨论过的数组是一个开始,但数组也有一些局限性。在本章中,我们将了解如何使用 Java 的集合思想高效、灵活地访问大量数据。我们还将了解如何像处理变量中的单个值一样,在这些大容器中处理我们想要存储的各种类型的数据。这就是泛型的用武之地。我们将在"类型限制 "中讨论泛型。

收藏品

集合是数据结构,是所有编程类型的基础。每当我们需要引用一组对象时,我们就会使用某种集合。在核心语言层面,Java 支持数组形式的集合。但是数组是静态的,而且由于它们有固定的长度,因此对于在应用程序生命周期中不断增大和缩小的对象组来说,数组是不合适的。数组在表示对象之间的抽象关系方面也很糟糕。早期,Java 平台只有两个基本类来满足这些需求:代表对象动态列表的java.util.Vector 类和保存键/值对映射的java.util.Hashtable 类。如今,Java 有了一种更全面的方法,称为集合框架。该框架规范了使用各种集合的方式。旧的类仍然存在,但它们已被改装到框架中(有一些偏心),一般不再使用。

虽然概念简单,但集合却是任何编程语言中最强大的部分之一。它们实现的数据结构是管理复杂问题的核心。大量的基础计算机科学都致力于描述通过集合实现特定类型算法的最有效方法。(如何在一个大集合中快速找到某样东西?如何对集合中的项目进行排序?如何高效地添加或删除项目?)掌握这些工具并了解如何使用它们,可以让你的代码更小更快。它还能让你免于重新发明轮子。

最初的集合框架有两个主要缺点。首先,集合必然是无类型的,只能与无差别的Objects 而不是特定类型(如Dates 和Strings)一起工作。这意味着每次从集合中取出对象时,都必须执行类型转换。这与 Java 的编译时类型安全背道而驰。但在实践中,这并不是一个问题,而仅仅是繁琐乏味而已。第二个问题是,由于实际原因,集合只能与对象一起工作,而不能与原始类型一起工作。这就意味着,如果要将数字或其他原始类型放入集合中,就必须先将其存储在封装类中,然后在检索时再将其解包。这一系列因素使得使用集合的代码可读性更差,危险性更高。

通过泛型(更多内容请参见"类型限制"),程序员可以控制真正类型安全的集合。除了泛型,基元类型的自动装箱和解箱意味着,在涉及集合时,通常可以将对象和基元等同对待。这些新特性的结合增加了一些安全性,可以大大减少代码的编写量。我们将看到,所有的集合类现在都利用了这些特性。

集合框架基于java.util 软件包中的一些接口。这些接口分为两个层次。第一个层次是从Collection 接口开始的。该接口(及其子接口)代表一个容纳其他对象的容器。第二个独立的层次结构以Map 接口为基础,它是另一个容器,代表一组键/值对,其中的键可用于以有效的方式检索值。

收藏界面

所有集合的母体是一个接口,其名称恰如其分:Collection 。它是一个容器,用来容纳其他对象(即其元素)。它并没有明确说明对象是如何组织的;例如,它没有说明是否允许对象重复或对象是否以任何方式排序。这些细节留给子接口或实现类去处理。不过,Collection 接口定义了所有集合共有的一些基本操作: ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

《学习 Python》第 5 版

《学习 Python》第 5 版

Mark Lutz
CSS:权威指南,第 5 版

CSS:权威指南,第 5 版

Eric Meyer, Estelle Weyl
詳解 システム・パフォーマンス 第2版

詳解 システム・パフォーマンス 第2版

Brendan Gregg, 西脇 靖紘, 長尾 高弘

Publisher Resources

ISBN: 9798341656772