`
tuoni
  • 浏览: 29039 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

容器类的概述

阅读更多
容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能。


Java2容器类类库的用途是“保存对象”,它分为两类:



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



Map----一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用。另外,Map可以返回其所有键组成的Set和其所有值组成的Collection,或其键值对组成的Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对的每个“值”是一个Map即可。



1.迭代器



迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。



Java中的Iterator功能比较简单,并且只能单向移动:



(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。



(2) 使用next()获得序列中的下一个元素。



(3) 使用hasNext()检查序列中是否还有元素。



(4) 使用remove()将迭代器新返回的元素删除。



Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。



2.List的功能方法



List(interface): 次序是List最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(只推荐LinkedList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和删除元素。



ArrayList: 由数组实现的List。它允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和删除元素,因为这比LinkedList开销要大很多。



LinkedList: 对顺序访问进行了优化,向List中间插入与删除得开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。



3.Set的功能方法



Set(interface): 存入Set的每个元素必须是唯一的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。



HashSet(无序不可重复的): 为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()。



TreeSet(有序不可重复的): 保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。



LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。



HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。

分享到:
评论

相关推荐

    c++容器类&QT;容器

    #### C++ 容器类概述 在C++标准库中,容器类(containers)是用于存储数据的重要组件之一,它们为程序设计提供了高度灵活且功能丰富的数据管理手段。根据数据的组织形式不同,C++中的容器大致可以分为两大类:**...

    Java容器类List、ArrayList、Vector及map、HashTable应用

    #### 一、Java容器类概述 在Java中,容器类(也称为集合类)主要用于存储和管理对象。Java SDK提供了一系列内置容器类,它们位于`java.util`包中,并且基于不同的数据结构实现,如数组、链表和哈希表。 #### 二、...

    Docker容器架构概述.pptx

    守护进程还提供了镜像类请求、容器类请求和其他类型请求的处理。 3. Docker 镜像仓库 Docker 镜像仓库是 Docker 镜像的全局存储,提供 API 接口,实现 Docker 镜像的下载、推送、查询等操作。镜像仓库还提供了租户...

    Java 容器类的解析及对比

    ### Java 容器类解析及对比 #### 一、概述 在Java开发中,容器类是程序员必须掌握的基础知识之一。本文将详细解析并对比Java中的各种容器类,特别是`Collection`、`List`、`ArrayList`、`Vector`以及`Map`、`...

    tree帮助文档

    ### 容器类概述 `tree.hh` 库提供的 `treeclass` 是一个 C++ 模板容器类,它遵循 STL 的精神,用于组织数据形成所谓的 N 叉树结构。在 N 叉树中,每个节点可以连接到任意数量的子节点。同一级别的节点被称为“兄弟...

    STL 定义的具体容器类

    ### STL 定义的具体容器类 #### 一、概述 STL(Standard Template Library,标准模板库)是C++标准库的重要组成部分,提供了一系列高效的数据结构和算法。STL定义了三种基本容器类型:顺序性容器、关联式容器以及...

    Java应用:两种Java容器类List和Set分析

    ### Java应用:两种Java容器类List和Set分析 #### 一、概述 在Java编程语言中,集合框架(Collections Framework)是处理数据的核心组件之一,它提供了存储和操作对象的各种方式。本文将深入探讨Java中的两种重要...

    STL关联容器概述1

    STL关联容器是C++ Standard Template Library中的一类重要容器,它们主要负责通过键值(key)来存储和检索元素。关联容器与序列式容器(如vector、list、deque等)不同,后者是通过元素在容器内的位置顺序来存取元素。...

    Tomcat 结构概述

    容器类元素代表处理客户请求并生成响应结果的组件,有三种容器类元素:Engine、Host 和 Context。嵌套类元素代表了可以加入到容器中的组件,如Logger元素、Valve元素和Realm元素,这些元素将在后面做介绍。 在 ...

    STL的容器deque的使用

    **STL中的deque容器详解** `deque`(双端队列)是C++标准模板库(STL)中的一种重要容器,它提供了类似数组的功能,同时支持在两端进行高效插入和删除操作。与vector相比,deque在两端操作时通常具有更好的性能,...

    Java语言概述 ppt

    - 变量:存储数据的容器,每个变量都有特定的数据类型。 - 控制结构:包括条件语句(if、switch)、循环语句(for、while、do-while)和跳转语句(break、continue)。 3. **Java的程序结构** - 类定义:通过...

    《面向对象技术与方法》13、对象容器.pdf

    - **如何选择容器类**:根据具体应用需求的特点选择最适合的容器类,因为每一种数据结构都有自己的优势和适用场景。 #### 五、数组类型详解 - **定义**:数组是数据项的有序列表,每个元素属于同一类型(基类型)...

    tomcat概述和体系架构

    在结构上,Tomcat的顶层类元素包括`<Server>`和`<Service>`,连接器类元素负责通信接口,而容器类元素则分为`Engine`、`Host`和`Context`,它们分别负责处理请求、特定虚拟主机请求和特定Web应用请求。所有的Tomcat...

    在STL的map或set容器中使用类作为key

    ### 在STL的map或set容器中使用类作为key #### 概述 在C++标准模板库(STL)中,`map` 和 `set` 容器是两种非常重要的容器类型,它们提供了高效的键值对管理和有序集合的管理方式。在实际应用中,我们常常需要使用...

    欧盟压力容器标准EN 分析设计标准概述定稿PPT学习教案.pptx

    【欧盟压力容器标准EN分析设计标准概述】 欧盟压力容器标准EN着重关注压力容器的安全性和可靠性,其中涉及到的主要设计方法有两种:应力分类法(弹性方法)和直接方法(非弹性方法)。这两种方法在压力容器的设计中...

    I类压力容器裂纹修补方案[定义].pdf

    【I类压力容器裂纹修补方案】主要涉及的是在压力容器出现裂纹后的修复流程和技术规范,这在软件开发领域中可能与设备管理和维护相关的系统设计有关。以下是该方案的关键知识点: 1. **法规依据**:修复过程遵循...

    C++顺序容器,容器适配器,关联容器的操作

    在C++标准库中,顺序容器是一类用于存储元素的容器,它们以特定的顺序来排列元素,并且通常提供了多种操作方法。本文将详细介绍几种常见的顺序容器,包括`vector`、`string`、`list`、`forward_list`、`deque`以及`...

    MFC 类结构关系图

    - 如`CArray`、`CMap`和`CPtrList`等都是独立的容器类。 6. **其他实用类**: - 这些类提供了特定的功能,例如文件操作(`CFile`)或数据库访问(`CDaoRecordset`)等。 #### 四、应用实例 为了更好地理解MFC类结构...

    面向对象的程序设计新版.doc

    每种容器类所能包含的对象包括命令按钮组、控件、表单集、表单页框、任意控件、容器或自定义对象等。 类的创立可以通过类设计器、表单设计器或编程方式实现。使用类设计器可以可视化地创立并修改类。类设计器提供了...

    c++/STL容器设计相关

    这些容器都是模板类,因此可以容纳任何类型的元素,只要元素类型满足容器的要求。 二、STL主要容器类型 1. 向量(vector):动态数组,提供随机访问和快速插入、删除(尾部)操作。 2. 列表(list):双向链表,...

Global site tag (gtag.js) - Google Analytics