您的位置:首页 > 编程语言 > Java开发

Java类集框架

2015-06-23 11:22 281 查看
  

  本文主要讲述Java类集框架。更多Java技术知识,请登陆疯狂软件教育官网。加微信号疯狂软件,或者用微信搜索疯狂软件,参加2015年优惠活动,有机会获得优惠劵和代金劵。

  一、系统简述:

  1.集合框架总体结构

  Java中集合类定义主要是java.util.*包下面,常用的集合在系统中定义了三大接口,这三类的区别是:

  java.util.Set接口及其子类,set提供的是一个无序的集合;

  java.util.List接口及其子类,List提供的是一个有序的集合;

  java.util.Map接口及其子类,Map提供了一个映射(对应)关系的集合数据结构;

  另外,在JDK5中新增了Queue(队列)接口及其子类,提供了基于队列的集合体系。每种集合,都可以理解为用来在内存中存放一组对象的某种”容器“---就像数组,就像前面我们自己定义的队列。

  一、系统简述:

  1.集合框架总体结构

  Java中集合类定义主要是java.util.*包下面,常用的集合在系统中定义了三大接口,这三类的区别是:

  java.util.Set接口及其子类,set提供的是一个无序的集合;

  java.util.List接口及其子类,List提供的是一个有序的集合;

  java.util.Map接口及其子类,Map提供了一个映射(对应)关系的集合数据结构;

  另外,在JDK5中新增了Queue(队列)接口及其子类,提供了基于队列的集合体系。每种集合,都可以理解为用来在内存中存放一组对象的某种”容器“---就像数组,就像前面我们自己定义的队列。

  2.Set接口和List接口

  Set 是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象;而LIst的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。关于实现列表的集合类,是我们日常工作中经常用到的;从类图中可以看到,Set 和List都是继承了Collection接口的子接口,而这类集合都有自己的实现;

  3.java.util.Map接口

  现实生活中,我们常会看到这样的一种集合:IP地址与主机名,***号与个人,系统用户用与系统用户对等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map接口。Map是一个接口,有多种具体的实现类,常用的有HashMap和 Hashtable类实现。Map中存入的对象是一对一对的,即每个对象和它的一个名字(键)关联在一起

  Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在Map中是一一对应关系,这一对对象又称做Map中的一个Entry(项);Map中的键不能重复,但值可以重复。

  二、详细阐述:

  一、概述

  数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法。

  在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection Framework)。

  Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了。这样就大大提高了编程效率。

  二、集合框架的层次结构

  Collection是集合接口

  |――――Set子接口:无序,不允许重复。

  |――――List子接口:有序,可以有重复元素。

  区别:Collections是集合类

  Set和List对比:

  Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

  List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

  Set和List具体子类:

  Set

  |――――HashSet:以哈希表的形式存放元素,插入删除速度很快。

  List

  |――――ArrayList:动态数组

  |――――LinkedList:链表、队列、堆栈。

  Array和java.util.Vector

  Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。

  三、Iterator迭代器(接口)

  Iterator是获取集合中元素的过程,实际上帮助获取集合中的元素。

  迭代器代替了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:

  迭代器允许调用方利用定义良好的语义在迭代期间从迭代器所指向的集合移除元素。

  方法名称得到了改进。

  Iterator 仅有一个子接口ListIterator,是列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。 ListIterator 没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。在长度为 n 的列表中,有 n+1 个有效的索引值,从 0 到 n(包含)。

  四、集合框架之外的Map接口

  Map将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。

  Map接口是Dictionary(字典)抽象类的替代品。

  Map 接口提供三种collection 视图,允许以键集、值集合或键-值映射关系集的形式查看某个映射的内容。映射的顺序 定义为迭代器在映射的 collection 视图中返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;某些映射实现则不保证顺序,如 HashMap 类。

  有两个常见的已实现的子类:

  HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

  TreeMap:它实现SortedMap 接口的基于红黑树的实现。此类保证了映射按照升序顺序排列关键字,根据使用的构造方法不同,可能会按照键的类的自然顺序 进行排序(参见 Comparable),或者按照创建时所提供的比较器进行排序。

  Hashtable:此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。

  五、线程安全类

  在集合框架中,有些类是线程安全的,这些都是JDK1.1中的出现的。在JDK1.2之后,就出现许许多多非线程安全的类。

  下面是这些线程安全的同步的类:

  Vector:就比ArrayList多了个同步化机制(线程安全)。

  Statck:堆栈类,先进后出。

  Hashtable:就比HashMap多了个线程安全。

  Enumeration:枚举,相当于迭代器。

  除了这些之外,其他的都是非线程安全的类和接口。

  线程安全的类其方法是同步的,每次只能一个访问。是重量级对象,效率较低。对于非线程安全的类和接口,在多线程中需要程序员自己处理线程安全问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息