`

Java标准类库提供的容器总结

阅读更多

在Java中,容器主要包括:数组(Array)、集合(Collection)和映射(Map)三种。

(1)数组Array:将数字与元素联系起来,其中的元素都具有相同的数据类型,只能通过下标来访问其元素;数组可以是一维的,也可以是多维的;数组一旦生成,其容量就不能改变。数组是一种复合数据类型,在Java中,除了可以像“int[] array;”来声明和表示一个数组,还可以用Array类来表示一个数组,同样地,JDK类库还提供了Arrays类类操作数组,该类定义了对数组进行操作的各种方法(赋值、排序、搜索、比较、查找元素等)。

(2)集合Collection:是一个接口类,包括List、Set、Queue等子接口,其具体的实现类可以用来保存多个元素。这里只讨论常用的子接口List和Set的常用实现类。常用的List实现类有ArrayList、Vector和LinkedList等,常用的Set实现类有HashSet、LinkedHashSet和TreeSet等。需要注意的是,List和Set有着很大的不同,主要包括是否允许元素重复和是否维护元素的次序。

(3)映射Map:保存相关联的键值对。其具体的实现类可以将键映射到值,根据键得到值,因此,一个映射不能包含重复的键,但是允许有重复的值,每个键最多只能映射到一个值。 常见的Map实现类有HashMap、Hashtable、LinkedHashMap和TreeMap等。

为了讨论的方便,下面以Array,List、Set、Map为分类来讨论这几种容器的使用特点。

(1)Array:

    数组的使用很直接,主要是根据下表来获取其元素。其特点就是一旦生成,其容量不能改变,并且每个元素之间不允许有“空隙”。其使用实例可以参考电子工业出版社“宝典”系列之《Java JDK 实例宝典》(夏先波 编著),个人感觉这本书写得不错,给出了许多JDK类库的具体使用实例,代码的注释也比较详细,很适合初学者入门学习使用,如果看Java Doc 还是有不明白的地方,也可以参考此书:)

(2)List:可用来存放多个元素,能够自动扩充容量,能够维护元素的次序,并且允许元素重复。

    (2.1)ArrayList类:最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速的随机访问,但是要从ArrayList的中间位置插入或者删除    元素时,需要对数组进行复制、移动,代价比较高,因此,ArrayList适合随机查找和遍历,不适合插入和删除。

    (2.2)Vector类:同ArrayList一样,其内部也是通过数组实现的,不同的是,Vector支持线程的同步,能够避免多线程同时写而引起的不一致,但是实现线程的同步需要很高的代价,因此访问Vector比ArrayList慢。

    (2.3)LinkedList类:见其名,该类与链表肯定有关系:)该类的内部是通过链表来实现的,很适合数据的动态插入和删除,但是随即访问和遍历的速度比较慢。此外,该类还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。


(3)Set:可用来存放多个元素,但是不允许元素重复(即不保存重复元素),也不能够维护元素的次序。很直观,联想一下数学中的集合的概念就很好理解了。此外,需要注意的是,加入Set的元素必须定义equals()方法以确保对象的唯一性,如String对象。

    (3.1) HashSet类:采用散列函数对元素进行排序,是专门为快速查询而设计的存入HashSet的对象必须定义hashCode()方法。

    (3.2)TreeSet类:采用红黑树的数据结构进行排序元素,使用它可以从Set中提取有序的序列。

    (3.3) LinkedHashSet类:内部使用散列以加快查询速度,同时使用链表维护元素的插入次序,在使用迭代器遍历时,会按插入次序显示结果。


(4)Map:可以用来存放相关联的键值对,根据键得到值。常见的Map实现类有HashMap、Hashtable、LinkedHashMap和TreeMap。

    (4.1)HashMap类:一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,但不支持线程同步。HashMap最多允许一条记录的键为null,但是允许多条记录的值为null。
    
    (4.2)Hashtable类:与HashMap类似,但是它不允许记录的键或者值为null,支持线程同步,因而Hashtable在写入数据时会很慢。

    (4.3)LinkedHashMap类:保存了记录的插入顺序,在用Iterator遍历它时,先得到的记录肯定时先插入的,在遍历的时候比HashMap慢。

    (4.4)TreeMap类:能够把它保存的记录根据键排序,默认为升序排列。当用Iterator遍历它时,得到的记录是排过序的记录。

分享到:
评论

相关推荐

    (zz)java集合类总结

    总结Java标准类库的容器类; 容器类库是你每天都会用到的工具,它能使程序更简介,更强大并且更搞笑。

    这是一个针对ECharts3.x(2.x)版本的Java类库,.rar

    这是一个针对ECharts3.x(2.x)版本的Java类库,实现了所有ECharts中的Json结构对应的Java对象,并且可以很方便的创建Option 2.Echarts使用 2.1、下载Echarts有关的js文件 根据自己的需求进行下载 2.2、下载...

    Java语言基础下载

    标准标签的使用 618 内容总结 621 独立实战 622 第三十章:struts入门 623 学习目标 623 Struts简介 624 什么是应用框架 624 WEB框架所要解决的问题 625 建立简单的Struts应用 627 内容总结 636 独立实践 636 第三十...

    tapioca:Tapioca 旨在在标准 Java 类库的现有部分(尽管有些模糊)之上提供一个极薄的层,以提供 IoC 容器

    Tapioca 旨在在标准 Java 类库的现有部分(尽管有些模糊)之上提供一个极薄的层,以提供 IoC 容器。 木薯粉代表什么吗? 是:(T)iny (A)PI (P)提供 (I)反转 (o)f (c)控制 (a)架构 木薯粉的目标是什么? 核心库...

    Java容器学习笔记:容器概览,容器中的设计模式,容器源码分析 - List,容器源码分析 - Map,容器源码分析 - 并发容

    Java容器学习笔记: 容器概览, 容器中的设计模式, 容器源码分析 - List, 容器源码分析 - Map, 容器源码分析 - 并发容 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。...Java类库提

    Java开发详解.zip

    031106_【第11章:Java常用类库】_日期操作类(DateFormat、SimpleDateFormat)笔记.pdf 031107_〖第11章:Java常用类库〗_实例操作:取得当前日期笔记.pdf 031108_【第11章:Java常用类库】_Math与Random类笔记.pdf...

    JAVA上百实例源码以及开源项目

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性...

    java源码包---java 源码 大量 实例

    2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包101

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包8

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    Java同步容器和并发容器详解

    主要介绍了Java同步容器和并发容器详解,容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,下面小编和大家来一起学习下吧

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包3

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics