`
zhangziyangup
  • 浏览: 1187244 次
文章分类
社区版块
存档分类
最新评论

四大名捕---java集合类框架概述

 
阅读更多

Java里面最重要,最常用也就是集合一部分了。能够用好集合和理解好集合对于做Java程序的开发拥有无比的好处。本文详细解释了关于Java中的集合是如何实现的,以及他们的实现原理。

集合框架

1. 集合框架概述

1.1.1 容器简介

到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一些有意义的事情。

举例来说,假设要存储许多雇员,不同的雇员的区别仅在于雇员的身份证号。我们可以通过身份证号来顺序存储每个雇员,但是在内存中实现呢?是不是要准备足够的内存来存储1000个雇员,然后再将这些雇员逐一插入?如果已经插入了500条记录,这时需要插入一个身份证号较低的新雇员,该怎么办呢?是在内存中将500条记录全部下移后,再从开头插入新的记录? 还是创建一个映射来记住每个对象的位置?当决定如何存储对象的集合时,必须考虑如下问题。

对于对象集合,必须执行的操作主要以下三种:

u 添加新的对象

u 删除对象

u 查找对象

我们必须确定如何将新的对象添加到集合中。可以将对象添加到集合的末尾、开头或者中间的某个逻辑位置。

从集合中删除一个对象后,对象集合中现有对象会有什么影响呢?可能必须将内存移来移去,或者就在现有对象所驻留的内存位置下一个“洞”。

在内存中建立对象集合后,必须确定如何定位特定对象。可建立一种机制,利用该机制可根据某些搜索条件(例如身份证号)直接定位到目标对象;否则,便需要遍历集合中的每个对象,直到找到要查找的对象为止。

前面大家已经学习过了数组。数组的作用是可以存取一组数据。但是它却存在一些缺点,使得无法使用它来比较方便快捷的完成上述应用场景的要求。

1.首先,在很多数情况下面,我们需要能够存储一组数据的容器,这一点虽然数组可以实现,但是如果我们需要存储的数据的个数多少并不确定。比如说:我们需要在容器里面存储某个应用系统的当前的所有的在线用户信息,而当前的在线用户信息是时刻都可能在变化的。 也就是说,我们需要一种存储数据的容器,它能够自动的改变这个容器的所能存放的数据数量的大小。这一点上,如果使用数组来存储的话,就显得十分的笨拙。

2.我们再假设这样一种场景:假定一个购物网站,经过一段时间的运行,我们已经存储了一系列的购物清单了,购物清单中有商品信息。如果我们想要知道这段时间里面有多少种商品被销售出去了。那么我们就需要一个容器能够自动的过滤掉购物清单中的关于商品的重复信息。如果使用数组,这也是很难实现的。

3.最后再想想,我们经常会遇到这种情况,我知道某个人的帐号名称,希望能够进一步了解这个人的其他的一些信息。也就是说,我们在一个地方存放一些用户信息,我们希望能够通过用户的帐号来查找到对应的该用户的其他的一些信息。再举个查字典例子:假设我们希望使用一个容器来存放单词以及对于这个单词的解释,而当我们想要查找某个单词的意思的时候,能够根据提供的单词在这个容器中找到对应的单词的解释。如果使用数组来实现的话,就更加的困难了。

为解决这些问题,Java里面就设计了容器集合,不同的容器集合以不同的格式保存对象。

数学背景

在常见用法中,集合(collection)和数学上直观的集(set)的概念是相同的。集是一个唯一项组,也就是说组中没有重复项。实际上,“集合框架”包含了一个Set 接口和许多具体的Set 类。但正式的集概念却比 Java 技术提前了一个世纪,那时英国数学家 George Boole 按逻辑正式的定义了集的概念。大部分人在小学时通过我们熟悉的维恩图引入的“集的交”和“集的并”学到过一些集的理论。

集的基本属性如下:

u 集内只包含每项的一个实例

u 集可以是有限的,也可以是无限的

u 可以定义抽象概念

集不仅是逻辑学、数学和计算机科学的基础,对于商业和系统的日常应用来说,它也很实用。“连接池”这一概念就是数据库服务器的一个开放连接集。Web 服务器必须管理客户机和连接集。文件描述符提供了操作系统中另一个集的示例。

映射是一种特别的集。它是一种对(pair)集,每个对表示一个元素到另一元素的单向映射。一些映射示例有:

u IP 地址到域名(DNS)的映射

u 关键字到数据库记录的映射

u 字典(词到含义的映射)

u 2 进制到 10 进制转换的映射

就像集一样,映射背后的思想比 Java 编程语言早的多,甚至比计算机科学还早。而Java中的Map 就是映射的一种表现形式。

1.1.2 容器的分类

既然您已经具备了一些集的理论,您应该能够更轻松的理解“集合框架”。“集合框架”由一组用来操作对象的接口组成。不同接口描述不同类型的组。在很大程度上,一旦您理解了接口,您就理解了框架。虽然您总要创建接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上;因此,允许您更改基本的数据结构而不必改变其它代码。框架接口层次结构如下图所示。

Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念:

1) Collection 。 一组对立的元素,通常这些元素都服从某种规则。List必须保持元素特定的顺序,而Set 不能有重复元素。

2) Map 。 一组 成对的“键值对”对象。初看起来这似乎应该是一个Collection ,其元素是成对的对象,但是这样的设计实现起来太笨拙了,于是我们将Map明确的提取出来形成一个独立的概念。另一方面,如果使用Collection 表示Map的部分内容,会便于查看此部分内容。因此Map一样容易扩展成多维Map ,无需增加新的概念,只要让Map中的键值对的每个“值”也是一个Map即可。

Collection和Map的区别在于容器中每个位置保存的元素个数。Collection 每个位置只能保存一个元素(对象)。此类容器包括:List ,它以特定的顺序保存一组元素;Set 则是元素不能重复。

Map保存的是“键值对”,就像一个小型数据库。我们可以通过“键”找到该键对应的“值”。

u Collection – 对象之间没有指定的顺序,允许重复元素。

u Set –对象之间没有指定的顺序,不允许重复元素

u List–对象之间有指定的顺序,允许重复元素,并引入位置下标。

u Map –接口用于保存关键字(Key)和数值(Value)的集合,集合中的每个对象加入时都提供数值和关键字。Map 接口既不继承 Set 也不继承 Collection。

List、Set、Map共同的实现基础是Object数组

除了四个历史集合类外,Java 2 框架还引入了六个集合实现,如下表所示。

接口

实现

历史集合类

Set

HashSet

TreeSet

List

ArrayList

Vector

LinkedList

Stack

Map

HashMap

Hashtable

TreeMap

Properties

这里没有 Collection 接口的实现,接下来我们再来看一下下面的这张关于集合框架的大图:

这张图看起来有点吓人,熟悉之后就会发现其实只有三种容器:Map,List和Set ,它们各自有两个三个实现版本。常用的容器用黑色粗线框表示。

点线方框代表“接口”,虚线方框代表抽象类,而实线方框代表普通类(即具体类,而非抽象类)。虚线箭头指出一个特定的类实现了一个接口(在抽象类的情况下,则是“部分”实现了那个接口)。实线箭头指出一个类可生成箭头指向的那个类的对象。例如任何集合( Collection )都能产生一个迭代器( Iterator ),而一个List 除了能生成一个ListIterator (列表迭代器)外,还能生成一个普通迭代器,因为List 正是从集合继承来的.


分享到:
评论

相关推荐

    Java-collection-frame.rar_Java集合框架

    在Java集合框架中,主要分为两大类:List(列表)、Set(集合)和Map(映射)。 1. List接口:List是一种有序的集合,允许包含重复元素。它定义了元素的插入、删除和访问方法,如add()、remove()和get()。ArrayList...

    java集合框架面试题

    Java集合框架概述及优点 - **定义**: Java集合框架是一个设计模式,用于组织和操纵对象集合。它由一系列接口、实现类和算法组成,提供了统一的方式管理和操作数据集合。最初Java版本中的集合类包括`Vector`、`...

    rocketmq-4.7.1Java 项目完整jar集合

    在这个"rocketmq-4.7.1Java 项目完整jar集合"中,我们看到的是一个包含了所有必要的库文件,以便于开发者在Java 1.8环境下快速搭建和运行RocketMQ项目。 首先,`jar`文件是Java档案文件,它是Java平台的标准打包...

    29-API-集合框架-泛型-使用_java_

    集合框架是Java中用于存储和操作对象的核心组件,包括List、Set和Map等接口以及它们的实现类。在未引入泛型之前,集合中的元素都是Object类型,这导致了频繁的强制类型转换,且存在潜在的ClassCastException风险。...

    java集合类学习笔记.doc

    #### 一、集合框架概述 ##### 1.1.1 容器简介 在Java编程中,容器是用于存储和管理对象集合的重要工具。当我们处理大量的对象时,比如存储多个员工的信息,仅仅依赖于基本的数据结构(如数组)可能不足以高效地...

    大学课程讲义-Java基础-Java集合.pptx

    Java 集合框架概述 Java 集合框架是 Java 语言中的一种数据结构,用于存储和操作多个对象引用。 Java 集合类可以分为 Set、List 和 Map 三种体系,分别用于存储无序、不可重复的集合、有序、可重复的集合和具有映射...

    Java集合类性能分析

    `Collection`接口是Java集合框架中最基础的接口之一,它是所有单个元素的集合类的父接口。`Collection`接口提供了一系列基本的操作,如增加元素、删除元素、获取子集等。 - **基本操作**: - `add(Object obj)`:...

    Java集合框架常见面试题.pdf

    Java 集合框架提供了多种类型的集合类,包括 List、Set、Map 等,每种集合类都有其特点和使用场景。 List 集合 List集合是一种有序的集合,元素可以重复,元素之间可以有顺序关系。常见的 List 集合类有 ...

    大公司最喜欢问的Java集合类面试题

    Java集合框架主要包括两大类:`Collection`和`Map`。本篇文章将着重介绍`Collection`部分,并探讨一些在大公司面试中常见的Java集合类相关问题。 #### 二、Collection接口及其子接口 - **Collection**:这是最基础...

    Java集合框架常见面试题

    Java集合框架常见面试题 剖析⾯试最常⻅问题之 Java 集合框架 包含以下几个模块: 1、集合概述 2、Collection子接口之List 3、Collection子接口之Set 4、Map接口 5、Collection工具类 6、其他重要问题

    Java 第二阶段提升编程能力【集合】---- 代码

    Java 第二阶段提升编程能力【集合】---- 代码 Java 第二阶段提升编程能力【集合】---- 代码 Java 第二阶段提升编程能力【集合】---- 代码 Java 第二阶段提升编程能力【集合】---- 代码 Java 第二阶段提升编程能力...

    Java集合类矩阵图

    Java集合类矩阵图是Java编程中非常重要的一个概念,它主要涵盖了Java集合框架中的各种接口、类以及它们之间的关系。这个矩阵图可以帮助开发者更清晰地理解Java集合框架的层次结构和实现方式。在这个矩阵图中,你可以...

    集合框架,java中常用的集合类和接口

    Java 集合框架概述 Java 集合框架是 Java 语言中提供的一种统一的标准体系结构,用于表示和操作集合。集合框架包含三大块内容:对外的接口、接口的实现和对集合运算的算法。 1. 接口:Collection 顶层接口是集合...

    基于java开发框架-22-集合框架.rar

    基于java开发框架-22-集合框架.rar

    java集合类的代码

    Java集合框架包括接口(如List、Set、Queue等)和实现这些接口的类(如ArrayList、HashSet、LinkedList等)。这个压缩包文件“Collection”很可能包含了关于Java集合类的一些示例代码,这些代码可以用于理解和学习...

    ptf4--------JAVA经典教程

    【标题】"ptf4--------JAVA经典教程"揭示了这是一份关于Java编程语言的教程,可能是一个系列的第四部分,通常这样的命名方式表明它是一个逐步深入的学习资源。"PTF"可能是“Programming Tutorial for”或者是某个...

    Java集合类原理详解.pdf

    集合框架概述 集合框架是Java编程语言的核心组件之一,用于组织和操作数据集。它提供了一种灵活高效的方式来存储和访问对象集合,支持多种数据结构,如列表(List)、集(Set)、映射(Map)等。 ##### 1.1.1 容器简介 ...

    精通java集合框架--List,Set..

    ### 精通Java集合框架——List, Set, Map #### 概述 Java集合框架是一种高度抽象且灵活的数据组织工具,它通过一系列接口来定义不同类型的数据容器,并提供了丰富的操作这些容器的方法。本文将深入探讨Java集合...

    BrucesJiang#Notes#Java集合类框架1

    Java集合类框架如图所示Java 8集合类框架:Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念:1. Collection -- 一个独立

    Java集合类图片

    Java集合类,在图片上体现出来,为了更好的描述,本来是博客里的,不好往博客里插,所以单独弄出来了。

Global site tag (gtag.js) - Google Analytics