Java 集合框架

早在Java 2中之前,Java就提供了特设类。
比如:Dictionary, Vector, Stack, 和Properties这些类用来存储和操作对象组。

虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用Vector类的方式和使用Properties类的方式有着很大不同。

集合框架被设计成要满足以下几个目标。

1.该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。

2.该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。

3.对一个集合的扩展和适应必须是简单的。

为此,整个集合框架就围绕一组标准接口而设计。
你可以直接使用这些接口的标准实现,诸如: LinkedList, HashSet, 和 TreeSet等,除此之外你也可以通过这些接口实现自己的集合。

集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:

接口:是代表集合的抽象数据类型。接口允许集合独立操纵其代表的细节。在面向对象的语言,接口通常形成一个层次。

实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构。

算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

除了集合,该框架也定义了几个Map接口和类。Map里存储的是键/值对。尽管Map不是collections,但是它们完全整合在集合中。

集合接口

集合框架定义了一些接口。本节提供了每个接口的概述:

Collection 接口
允许你使用一组对象,是Collection层次结构的根接口。

List 接口
继承于Collection和一个 List实例存储一个有序集合的元素。

Set
继承于 Collection,是一个不包含重复元素的集合。

SortedSet
继承于Set保存有序的集合。

Map
将唯一的键映射到值。

Map.Entry
描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。

SortedMap
继承于Map,使Key保持在升序排列。

Enumeration
这是一个传统的接口和定义的方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器取代。

集合类

Java提供了一套实现了Collection接口的标准集合类。其中一些是具体类,这些类可以直接拿来使用,而另外一些是抽象类,提供了接口的部分实现。

标准集合类汇总于下表:

AbstractCollection
实现了大部分的集合接口

AbstractList
继承于AbstractCollection并且实现了大部分List接口

AbstractSequentialList
继承于 AbstractList ,提供了对数据元素的链式访问而不是随机访问。

LinkedList
继承于 AbstractSequentialList,实现了一个链表。

ArrayList
通过继承AbstractList,实现动态数组。

AbstractSet
继承于AbstractCollection 并且实现了大部分Set接口。

HashSet
继承了AbstractSet,并且使用一个哈希表。

LinkedHashSet
具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。

TreeSet
继承于AbstractSet,使用元素的自然顺序对元素进行排序.

AbstractMap
实现了大部分的Map接口。

HashMap
继承了HashMap,并且使用一个哈希表。

TreeMap
继承了AbstractMap,并且使用一颗树。

WeakHashMap
继承AbstractMap类,使用弱密钥的哈希表。

LinkedHashMap
继承于HashMap,使用元素的自然顺序对元素进行排序.

IdentiyHashMap
继承AbstractMap类,比较文档时使用引用相等。

Vector
Vector类实现了一个动态数组。和ArrayList和相似,但是两者是不同的。

Stack
栈是Vector的一个子类,它实现了一个标准的后进先出的栈。

Dictionary
Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。

Hashtable
Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。

Properties
Properties 继承于 Hashtable.表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。

BitSet
一个Bitset类创建一种特殊类型的数组来保存位值。BitSet中数组大小会随需要增加。

一个Bitset类创建一种特殊类型的数组来保存位值。BitSet中数组大小会随需要增加。

集合算法

集合框架定义了几种算法,可用于集合和映射。这些算法被定义为集合类的静态方法。

在尝试比较不兼容的类型时,一些方法能够抛出 ClassCastException异常。当试图修改一个不可修改的集合时,抛出UnsupportedOperationException异常。

集合定义三个静态的变量:EMPTY_SET EMPTY_LIST,EMPTY_MAP的。这些变量都不可改变。

Collection Algorithms
这里是一个列表中的所有算法实现。

如何使用迭代器

通常情况下,你会希望遍历一个集合中的元素。例如,显示集合中的每个元素。
做到这一点最简单的方法是采用一个迭代器,它是一个对象,实现了Iterator 接口或ListIterator接口。

迭代器,使你能够通过循环来得到或删除集合的元素。ListIterator继承了Iterator,以允许双向遍历列表和修改元素。

这里通过实例列出Iterator和listIterator接口提供的所有方法。

如何使用比较器

TreeSet和TreeMap的按照排序顺序来存储元素. 然而,这是通过比较器来精确定义按照什么样的排序顺序。

这个接口可以让我们以不同的方式来排序一个集合。

比较器方法描述
使用 Java Comparator
这里通过实例列出Comparator接口提供的所有方法

总结

Java集合框架为程序员提供了预先包装的数据结构和算法来操纵他们。
集合是一个对象,可容纳其他对象的引用。集合接口声明对每一种类型的集合可以执行的操作。
集合框架的类和接口均在java.util包中。

20180826(02)-Java集合框架的更多相关文章

  1. Java集合框架Collection

    转自:http://www.cdtarena.com/javapx/201306/8891.html [plain] view plaincopyprint?01.在 Java2中,有一套设计优良的接 ...

  2. Java集合框架之四大接口、常用实现类

    Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...

  3. 我所理解Java集合框架的部分的使用(Collection和Map)

    所谓集合,就是和数组类似——一组数据.java中提供了一些处理集合数据的类和接口,以供我们使用. 由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合. 以下是java集合框架(短虚线表示接 ...

  4. 【转载】Java 集合框架

    http://wangkuiwu.github.io/2012/02/03/collection-03-arraylist/ 网上比较全的Java集合框架教程. 注:transient是Java语言的 ...

  5. Java集合框架之Vector浅析

    Java集合框架之Vector浅析 一.Vector概述: 位于java.util包下的Vector是Java集合框架的重要一员,虽然没有ArrayList那么的常用,但是我们还要对其做相关学习: 1 ...

  6. Java集合框架之LinkedList浅析

    Java集合框架之LinkedList浅析 一.LinkedList综述: 1.1LinkedList简介 同ArrayList一样,位于java.util包下的LinkedList是Java集合框架 ...

  7. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  8. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  9. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

随机推荐

  1. 转发与重定向(forward与redirect)

    顾名思义,转发是内部跳转:重定向是重新定向后跳转. 区别: 地址栏显示上: forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器. ...

  2. php扩展安装范例

    php扩展安装: 安装bcmath: /usr/local/php/bin/phpize //指定路径 ./configure //可查找路径 ./configure --with-php-confi ...

  3. source ~/.bash_profile是什么意思

    ~ 这个符号表示你的家目录,.bash_profile 是一个隐藏文件,主要是用来配置bash shell的,source -/.bash_profile 就是让这个配置文件在修改后立即生效.

  4. jQuery Ajax方法调用 Asp.Net WebService、WebMethod 的详细实例代码

    将以下html存为ws.aspx <%@ Page Language="C#" AutoEventWireup="true" %> <scri ...

  5. TP框架对数据库的基本操作

    数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是对数据的增删改的操作,一步步的讲述一下框架对数据库的操作 想要操作数据库,第一步必然是要:链接数据库 一.链接数据库 (1)找 ...

  6. 结合element-ui封装的一个分页函数

    第一次写博客,专门写给菜鸟看的,如果你是老鸟,你可以直接无视. 首先我们从豆瓣api获取到电影的数据列表 然后我们把他们切成一块一块的小数组 最后的数组将会是这样  原理就是以上的内容,接下来直接附上 ...

  7. STL 迭代器适配器(iterator adapter)

    iterator adapter graph LR iterator --- reverse_iterator iterator --- Insert_iterator iterator --- io ...

  8. 剑指Offer编程题(Java实现)——二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  9. SQL取年月日的不同格式

    Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE( ...

  10. Linux 修改hostname几种方式

    1:  hostname DB-Server          --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改 2:  echo DB-Server  > /proc/sys ...